Node 运行 Lua 脚本返回排序后的集合到 Node,如何实现?

以下是 test.lua 文件中的 Lua 脚本代码:

local ips_key = 'production:ips'
local ids = redis.call('ZRANGE', ips_key, 0, '+inf', 'WITHSCORES')
local result = {}
for i, name in ipairs(ids) do
    table.insert(result, name)
end
return js.global:Array(table.unpack(result))

我正在使用 Redis 的 npm 包 ioredis,并且使用 eval 方法来运行这个 Lua 脚本,但是返回值是 undefined。我做错了什么?谢谢!

点赞
用户3160475
用户3160475

以下脚本存在几个问题:

第二行:ZRANGE命令不接受+inf(或-inf)作为参数,输入应该是有序集合中的索引 - 将其替换为-1以检索整个元素范围。

第七行:Redis的Lua中没有js库,因此无法使用该库(也不需要)

第七行: table.unpack是Lua 5.3的,而Redis是5.1 - 在需要时请改用unpack

第七行:不需要对返回的结果进行unpack(如果这样做,您将只返回数组中的第一个元素)。

总的来说,当以单个键作为输入调用时,这段代码应该可以“工作”:

local ips_key = KEYS [1]
local ids = redis.call('ZRANGE',ips_key,0-1'WITHSCORES'local result = {}
for i,name in ipairs(ids)do
    table.insert(result,name)
end
返回结果

最后说明一下,该代码当前“工作”,但不做任何事情 - 它复制了对“ZRANGE”调用的结果并返回它们。换句话说,答复与普通调用ZRANGE的回复相同,不使用Lua。

2017-04-28 11:10:01