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