我正在使用 lua 脚本来获得ZINTERSTORE结果。我想要的是能够在调用中给 lua 一个动态数量的 zsets,这样:
redis.pcall('ZINTERSTORE', result, n, keys[1], keys[2], keys[3], keys[4], keys[5], 'AGGREGATE', 'MAX')
Run Code Online (Sandbox Code Playgroud)
变成这样:
redis.pcall('ZINTERSTORE', result, n, dynamic_key_list, 'AGGREGATE', 'MAX')
Run Code Online (Sandbox Code Playgroud)
Lua 的table.getn函数让我得到 size n。这里的问题是,如果dynamic_key_list是一个列表,那么 redis 会很早就大声喊叫:
Lua redis() command arguments must be strings or integers
Run Code Online (Sandbox Code Playgroud)
我已经看到了这个可能的解决方案,但我不想每次都遍历表并进行 redis 调用,因为我可能有 10-15 个键,这是我负担不起的开销。还有其他方法吗?
为了将 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))
Run Code Online (Sandbox Code Playgroud)