En raison de la performance, j'ai besoin de réduire le nombre de sauts à Redis. Je fais appel HMSET plusieurs fois à partir du code C++ et j'étudie si elle est poosible de changer cela en utilisant le script Lua et définir des clés de hachage Redis avec un appel à Redis:Plusieurs HMSET à Redis avec script Lua
HMSET myhash1 field1 "Hello" field2 "World"
HMSET myhash2 field1 "Hello" field2 "World"
HMSET myhash3 field1 "Hello" field2 "World"
...
HMSET myhashN field1 "Hello" field2 "World"
Comment puis-je passer au script plusieurs clés de hachage et plusieurs champs/valeurs?
== Mise à jour Sur la base de commentaires Itamar Haber, je me suis dit que mon problème était la virgule avec un espace manquant entre les clés et les valeurs argv -
J'ai fini le script suivant:
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"
Je ne suis pas sûr si elle peut être optimisée davantage pour éviter de répéter les noms de champs ou de passer un nombre arbitraire de champs/valeurs pour chaque clé.
Salut @Itamar Haber, merci pour votre réponse. Malheureusement, le client nekipelov/redisclient que j'utilise ne supporte pas le pipelining. – gliatsos
Alors utilisez un script;) Avez-vous besoin d'un exemple? –
Mon principal problème est de savoir comment passer les clés de hachage dans KEYS et les valeurs de champs à l'ARGV. Toutes mes tentatives à ce jour remplissent KEYS mais ARGV est vide. Pouvez-vous me référer à un exemple? Je vous remercie! – gliatsos