Redis Lua 脚本 - 如何在 nodejs 中将数组作为参数传递给 Lua 脚本?

我正在从 nodejs 调用 Lua 脚本。我想将一个数组作为参数传递。我无法在 Lua 中解析该数组。

以下是一个例子:

var script = 'local actorlist = ARGV[1]
if #actorlist > 0 then
for i, k in ipairs(actorlist) do
   redis.call("ZADD","key", 1, k)
end
end';

client.eval(
     script, //lua source
     0,
     ['keyv1','keyv2']
     function(err, result) {
         console.log(err+'------------'+result);
     }
    );

它给了我这个错误:

"ERR 运行脚本出错 (调用 f_b263a24560e4252cf018189a4c46c40ce7d1b21a): @user_script:1: user_script:1: 'ipairs' 的第一个参数必须是一个可迭代的表,但得到了一个字符串"

点赞
用户3533641
用户3533641

你可以仅使用 ARGV 来实现:

local actorlist = ARGV

for i, k in ipairs(actorlist) do

并在控制台中传递参数,例如:

eval "_script_" 0 arg1 arg2 argN
2017-07-14 15:35:47
用户802518
用户802518

你只能将字符串传递到 Redis lua 脚本中。

如果你需要传递一个由值组成的数组到 Redis lua 脚本中,你可以这样做:

let script = `
if #ARVG > 0 then
    for i, k in ipairs(ARGV) do
       redis.call("ZADD","key", 1, k)
    end
end`;

client.eval(
     script, //lua source
     0,
     ...['keyv1','keyv2'],
     function(err, result) {
         console.log(err+'------------'+result);
     }
);

重要的是,在调用 eval 时要将 keyv1keyv2 作为分离的参数传递。(我在这里使用 es6 语法)

2018-07-12 21:15:59