当我使用Lua脚本查询列表时,如果列表不为空,则会得到正确的结果。但是如果列表为空,则会出错。
打击是我的剧本:
const char * sLuaQueryServers = "local key_list = redis.call('KEYS',
KEYS[1]); return(redis.call('MGET', unpack(key_list)))";
我以“ serverlist:*”作为密钥,它已成功返回列表中的服务器。
但是,如果redis中没有服务器,则会出现以下错误:
ERR Error running script (call to
f_88620231033e13635dc3181f2947a740f91012dc): @user_script:1: @user_script:
1: Wrong number of args calling Redis command From Lua script
"
请帮助。
答案 0 :(得分:1)
对于您的问题,请在致电MGET
之前添加检查列表是否为空的信息,例如:
local key_list = redis.call('KEYS', KEYS[1])
if #key_list > 0 then
return(redis.call('MGET', unpack(key_list)))
else
return nil
end
注释1:在Lua中不需要分号
注意#2:除调试外,不建议使用KEYS
注释#3:您正在使用KEYS
表传递一个参数,但是由于脚本正在运行KEYS
(该命令),这确实是一个争论点