Script Lua para deletar as chaves com prefixo:
local cursor = "0"
repeat
local result = redis.call("SCAN", cursor, "MATCH", ARGV[1], "COUNT", 1000)
cursor = result[1]
local keys = result[2]
if #keys > 0 then
redis.call("DEL", unpack(keys))
end
until cursor == "0"
return true
E aqui está como você chamaria este script a partir do seu cliente Redis:
EVAL "local cursor = '0' repeat local result = redis.call('SCAN', cursor, 'MATCH', ARGV[1], 'COUNT', 1000) cursor = result[1] local keys = result[2] if #keys > 0 then redis.call('DEL', unpack(keys)) end until cursor == '0' return true" 0 "my-prefix:*"
Este script usa o comando SCAN
para iterar sobre as chaves em lotes de 1000, correspondendo ao padrão dado (my-prefix:*
). Ele deleta cada lote de chaves antes de passar para o próximo lote.
Essa abordagem evita o problema de tentar unpack
muitas chaves de uma vez. Se você precisar ajustar o tamanho do lote, pode alterar o 1000
para outro número.