2017-01-20 11 views
2

Aufgrund der Leistung muss ich die Anzahl der Hops zu Redis minimieren. Ich rufe HMSET mehrere Male von C++ Code und ich untersucht habe, ob es poosible ist dieses Skript unter Verwendung von Lua zu ändern und mehr Redis Hash-Schlüssel mit einem Aufruf zu Redis:Mehrere HMSET zu Redis mit Lua-Skript

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

Wie kann ich an das Skript übergebe mehrere Hash-Schlüssel und mehrere Felder/Werte?

== UPDATE Basierend auf Itamar Haber Kommentar, habe ich herausgefunden, dass mein Problem das Komma mit einem Raum fehlt zwischen den Tasten und ARGV Werte war -

ich auf das folgende Skript endete:

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" 

Ich bin nicht sicher, ob es weiter optimiert werden kann, um zu vermeiden, die Feldnamen zu wiederholen oder beliebig viele Felder/Werte für jeden Schlüssel zu übergeben.

Antwort

1

Um die Hops zu minimieren, können Sie stattdessen Pipelining verwenden - einfacher und hat den gewünschten Effekt.

Ein Skript kann auch die Hops minimieren. Verwenden Sie das Array KEYS, um Hash-Schlüsselnamen an das Skript und das Array ARGV zu übergeben, um die Felder und Werte bereitzustellen.

+0

Hallo @Itamar Haber, danke für Ihre Antwort. Leider unterstützt der von mir verwendete nekipelov/redisclient kein Pipelining. – gliatsos

+0

Also benutze ein Skript;) Brauchst du ein Beispiel von einem? –

+0

Mein Hauptproblem ist, wie die Hash-Schlüssel in KEYS und die Felder Werte an die ARGV übergeben werden. Alle meine bisherigen Versuche füllen KEYS, aber ARGV ist leer. Kannst du mich auf ein Beispiel verweisen? Vielen Dank! – gliatsos

Verwandte Themen