2017-02-17 3 views
1

나는 lua 스크립트를 사용하여 ZINTERSTORE 결과를 얻고 있습니다. 같은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 기능 날 크기 n를 얻을 수 있습니다를 내가 원하는 통화에서 zsets의 동적 수 루아 같은 것을 줄 수있을 것입니다. 내가 this 가능한 솔루션을 본 적이 있지만 테이블을 반복하고, 레디 스마다 전화를하고 싶지 않아

Lua redis() command arguments must be strings or integers 

: 여기에 문제 dynamic_key_list가리스트 인 경우, 다음 레디 스 큰 소리로 조기에 울고 있다는 것입니다 왜냐하면 나는 잠재적으로 10-15 개의 키를 가질 수 있기 때문에 내가 감당할 수없는 오버 헤드이다. 다른 방법이 있습니까?

답변

4

변수 매개 변수를 사용하는 함수에 루아 배열/테이블을 전달하려면 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)) 
관련 문제