使用LUA脚本查询列表时出现错误

时间:2018-07-24 07:55:37

标签: lua redis

当我使用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
"

请帮助。

1 个答案:

答案 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(该命令),这确实是一个争论点