local cursor = 0
local keyNum = 0
repeat
local res = redis.call('scan',cursor,'MATCH',KEYS[1],'COUNT',ARGV[1])
if(res ~= nil and #res>=0)
then
cursor = tonumber(res[1])
local ks = res[2]
if(ks ~= nil and #ks>0)
then
for i=1,#ks,1 do
local key = tostring(ks[i])
redis.call('UNLINK',key)
end
keyNum = keyNum + #ks
end
end
until( cursor <= 0 )
return keyNum
上图为SCAN方式批量删除指定前缀的Lua脚本 Redis版本要高于2.8才可以使用SCAN
KEY[1] 为要删除的前缀 举例为 Test.* 代表以Test.开头的所有Key
ARGV[1] 单次遍历的数量 注意 不是返回的数量,举例 服务器总共Key有10万 设置为20000则需要循环5次才能全部遍历完
如果Redis版本低于2.8的话 使用不了SCAN只能使用KEYS了
local ks = redis.call('keys', '{key}')
for i=1,#ks,5000 do
redis.call('del', unpack(ks, i, math.min(i+4999, #ks)))
end
return true
{Key} 是要删除的前缀 举例为 Test.* 代表以Test.开头的所有Key