Redis Lua: redis调用中的可变数量的键

我正在使用 Lua 脚本来获得 ZINTERSTORE 的结果。我想要的是能够在调用中给 Lua 提供一组动态数量的 zset,例如:

redis.pcall('ZINTERSTORE', result, n, keys[1], keys[2], keys[3], keys[4], keys[5],  'AGGREGATE', 'MAX')

变成了这样:

redis.pcall('ZINTERSTORE', result, n, dynamic_key_list, 'AGGREGATE', 'MAX')

Lua 的 table.getn 函数允许我获取大小 n。问题在于,如果 dynamic_key_list 是列表,那么 Redis 就会很早就报错了:

Lua redis() command arguments must be strings or integers

我已经看到过这个解决方案,但我不想每次都要迭代表格并执行 Redis 调用,因为我可能会有 10-15 个键,这是我无法承受的开销。还有别的办法吗?

点赞
用户5384363
用户5384363

为了将 Lua 数组/表传递给接收可变参数的函数,你需要使用 unpack 函数。

-- 将 redis.pcall 的所有参数放入 Lua 数组/表中
local args = {'ZINTERSTORE', result, n}
for i, v in ipairs(dynamic_key_list) do
    table.insert(args, v)
end
table.insert(args, 'AGGREGATE')
table.insert(args, 'MAX')

-- 解包数组/表并传递给 redis.pcall
redis.pcall(unpack(args))
2017-02-17 08:22:30