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

Làm thế nào để xóa nguyên tử hàng triệu phím khớp với một mẫu bằng Redis thuần túy?

Tập lệnh Lua sau sử dụng SCAN , vì vậy nó sẽ xóa từng phần trong tập lệnh - tránh lỗi "quá nhiều phần tử để giải nén".

local cursor = 0
local calls = 0
local dels = 0
repeat
    local result = redis.call('SCAN', cursor, 'MATCH', ARGV[1])
    calls = calls + 1
    for _,key in ipairs(result[2]) do
        redis.call('DEL', key)
        dels = dels + 1
    end
    cursor = tonumber(result[1])
until cursor == 0
return "Calls " .. calls .. " Dels " .. dels

Nó trả về số lần SCAN đã được gọi và bao nhiêu khóa đã bị xóa.

Sử dụng như:

EVAL "local cursor = 0 local calls = 0 local dels = 0 repeat    local result = redis.call('SCAN', cursor, 'MATCH', ARGV[1])     calls = calls + 1   for _,key in ipairs(result[2]) do       redis.call('DEL', key)      dels = dels + 1     end     cursor = tonumber(result[1]) until cursor == 0 return 'Calls ' .. calls .. ' Dels ' .. dels" 0 prefix:1

Lưu ý rằng nó sẽ chặn máy chủ khi đang chạy, vì vậy nó không được khuyên dùng cho sản xuất như hiện nay.

Đối với quá trình sản xuất, hãy xem xét việc thay đổi DEL cho UNLINK . Bạn cũng có thể trả về con trỏ (thay vì lặp lại bên trong tập lệnh cho đến khi nó bằng 0) và thêm tham số COUNT vào SCAN để tiết lưu (xem Có giá trị khuyến nghị nào của COUNT cho lệnh SCAN / HSCAN trong REDIS không?). Theo cách này, bạn thực hiện theo nhiều phần thay vì một lượt, tương tự như Làm cách nào để tôi có được tất cả các bộ trong redis?

Hoặc bạn có thể làm điều gì đó phức tạp hơn bằng cách sử dụng phương pháp được nêu trong câu trả lời này:Redis `SCAN`:làm thế nào để duy trì sự cân bằng giữa các khóa mới có thể khớp và đảm bảo kết quả cuối cùng trong một thời gian hợp lý?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để nhận được tất cả các công việc đang chờ xử lý trong hàng đợi laravel trên redis?

  2. Nén trong node.js

  3. Kết nối Redis qua socket trên Node.js

  4. Lắng nghe những thay đổi trong Redis?

  5. Thông cáo báo chí:ScaleGrid thông báo dịch vụ lưu trữ cho Redis ™ trên AWS