Redis Lua:redis调用中的动态键数

时间:2017-02-17 07:18:27

标签: 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

我已经看到了this可能的解决方案,但是我不想迭代遍历表并且每次都进行redis调用,因为我可能有10-15个密钥而且这是一个开销我可以'买得起。还有另一种方式吗?

1 个答案:

答案 0 :(得分:4)

为了将lua数组/表传递给带有可变参数的函数,需要unpack函数。

-- put all arguments of redis.pcall into a lua array/table
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')

-- unpack the table and pass to redis.pcall
redis.pcall(unpack(args))