首页 > 解决方案 > 使用 LUA 脚本查询列表时出错

问题描述

当我使用 Lua 脚本查询列表时,如果列表不为空,我会得到正确的结果。但如果列表为空,则会出错。

Blow 是我的脚本:

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
"

请帮忙。

标签: luaredis

解决方案


对于您的问题,请在调用之前添加一个检查列表是否为空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(命令),这确实是一个有争议的问题


推荐阅读