Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

xóa hàng loạt giá trị băm redis dựa trên tên khóa băm

Tập lệnh EVAL sau sẽ thực hiện những gì bạn muốn:

local keys = redis.call('KEYS',KEYS[1])
for i,k in ipairs(keys) do
    local res = redis.call('HKEYS',k)
    for j,v in ipairs(res) do
        if string.find(v,ARGV[1]) then
            redis.call('HDEL',k,v)
        end
    end
end

Bạn cần gọi nó bằng cách cung cấp các thông số sau:

EVAL <script> 1 prefix:* cc_..

Xin lưu ý rằng nó chặn vòng lặp sự kiện Redis cho đến khi tập lệnh hoàn tất, vì vậy nó có thể đóng băng Redis trong một thời gian nếu bạn có một số lượng lớn khóa. Tính nguyên tử có một cái giá.

Cập nhật:

Nếu bạn không cần tính nguyên tử, thì tập lệnh sau sẽ tránh chặn Redis quá lâu (nhưng xin lưu ý, nó vẫn sẽ chặn nếu bạn có số lượng khóa toàn cầu lớn hoặc nếu một trong những đối tượng băm của bạn rất lớn:có không có cách nào để tránh điều này).

Tiền tố
./redis-cli keys 'prefix:*' | awk '
BEGIN {
    script = "local res = redis.call('\''HKEYS'\'',KEYS[1]); \
          for j,v in ipairs(res) do                          \
            if string.find(v,ARGV[1]) then                   \
              redis.call('\''HDEL'\'',KEYS[1],v);            \
            end                                              \
          end"
}
{
    printf "EVAL \"%s\" 1 %s cc_..\n", script, $1
}' | ./redis-cli

(đã thử nghiệm với bash)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. python-rq worker tự động đóng

  2. redis lua script so với các cuộc gọi đơn lẻ

  3. Ví dụ để sử dụng socket.io-redis

  4. Redis thiết kế cấu trúc dữ liệu để sắp xếp các giá trị dựa trên thời gian

  5. Spring session redis 'Không có bean nào có tên' springSessionRepositoryFilter 'được xác định'