redis LUA 脚本 删除 - 调用删除VS扫描unlink

 `local keys = redis.call('keys', KEYS[1])
  for i=1,#keys,5000 do
      redis.log(redis.LOG_WARNING, "i== ",i)
      redis.call('UNLINK', unpack(keys, i, math.min(i+4999, #keys)))
  end`

你好

在 lua redis 中,使用普通调用还是扫描再unlink,哪一种代码性能更佳?

local cursor = 0
local keyNum = 0
repeat
   local res = redis.call('scan',cursor,'MATCH',KEYS[1])

 -- redis.log(redis.LOG_WARNING, "res  ", res)

   if(res ~= nil and #res>=0)
  then
     cursor = tonumber(res[1])
   --   redis.log(redis.LOG_WARNING, "cursor  ", cursor)
      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然后unlink)更快?

我听说scan更加高效,请给予建议。

点赞