使用LUA脚本查询列表时遇到错误

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

请帮忙。

点赞
用户3160475
用户3160475

针对你的问题,在调用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(命令),这实际上是一个无意义的点

2018-07-24 08:55:24