2017-02-17 11 views
1

Я использую сценарий lua для получения результата ZINTERSTORE. То, что я хочу, чтобы быть в состоянии дать Lua динамического ряда zsets в вызове, что:Redis Lua: динамическое число клавиш в вызове redis

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') 

table.getn функция Lua в позволяет мне получить размер n. Проблема здесь в том, что если dynamic_key_list список, то Redis плачет громко и рано с:

Lua redis() command arguments must be strings or integers 

Я видел this возможное решение, но я не хочу итерацию над столом и делают Redis звонить каждый раз , так как я мог бы иметь 10-15 ключей, и это накладные расходы, которые я не могу себе позволить. Есть ли другой способ?

ответ

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)) 

 Смежные вопросы

  • Нет связанных вопросов^_^