我正在使用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个密钥而且这是一个开销我可以'买得起。还有另一种方式吗?
答案 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))