redis中使用lua获取所有未设置过期时间的key

redis中是可以使用eval直接运行lua的,但是不宜编写耗时的逻辑。
eval传送门

使用eval命令运行lua脚本通过scan遍历当前库的所有key,然后返回所有未设置过期时间的key列表

local result = {}, done = false, cursor = "0";
repeat
    local sr = redis.call("SCAN", cursor);
    cursor = sr[1];
    for i, key in ipairs(sr[2]) do
        if redis.call("ttl", key) == -1 then
            table.insert(result,key)
        end;
    end;
    if cursor == "0" then
        done = true
    end;
until done;
return result;

这种代码只适合库存很小的时候使用

评论