2017-01-20 4 views
2

성능면에서 Redis의 홉 수를 최소화해야합니다. 나는 HMSET에게 C++ 코드에서 여러 번 호출하고 레디 스 한 호출 루아 스크립트와 설정 여러 레디 스 해시 키를 사용하여이를 변경하는 poosible 경우 내가 조사하고있다 : 나는 스크립트에 전달할 수있는 방법Lua 스크립트를 사용하여 여러 HMSET에서 Redis로

HMSET myhash1 field1 "Hello" field2 "World" 
HMSET myhash2 field1 "Hello" field2 "World" 
HMSET myhash3 field1 "Hello" field2 "World" 
... 
HMSET myhashN field1 "Hello" field2 "World" 

을 여러 해시 키 및 여러 필드/값? 이타 마르 하버의 의견을 바탕으로

== UPDATE , 나는 내 문제는 공간이 키와 ARGV 값 사이에 누락 된 쉼표 것을 알아 냈어 - 나는 다음과 같은 스크립트에 결국

:

local k = 1 
for i=1, #KEYS do 
    if redis.call('hmset', KEYS[i], ARGV[k], ARGV[k+1], ARGV[k+2], ARGV[k+3]) == 1 then 
     return 1 
    end 
    k = k + 4 
end                                                
return 0 

redis-cli --eval /var/tmp/script.lua myhash1 myhash2 , field1 "Hello" field2 "World" field1 "Hello" field2 "World" 

필드 이름을 반복하거나 각 키의 임의의 수/필드/값을 전달하지 않도록 추가로 최적화 할 수 있는지 확실하지 않습니다.

답변

1

홉을 최소화하려면 파이프 라이닝을 대신 사용할 수 있습니다 (더 간단하고 원하는 효과 있음).

스크립트는 또한 홉을 최소화 할 수 있습니다. KEYS 배열을 사용하여 해시 키 이름을 스크립트에 전달하고 ARGV 배열을 사용하여 필드와 값을 제공하십시오.

+0

안녕하세요 @Itamar Haber, 답장을 보내 주셔서 감사합니다. 불행히도, 사용중인 nekipelov/redisclient는 파이프 라이닝을 지원하지 않습니다. – gliatsos

+0

스크립트를 사용하십시오.) 예제가 필요합니까? –

+0

내 주요 문제는 KEYS의 해시 키와 필드 값을 ARGV에 전달하는 방법입니다. 지금까지의 모든 시도는 KEYS를 채우고 있지만 ARGV는 비어 있습니다. 당신은 저에게보기를 의뢰 할 수 있는가? 고맙습니다! – gliatsos