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;
这种代码只适合库存很小的时候使用