Redis 使用Lua腳本刪除指定前綴的Key

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
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章