2017-01-20 13 views
2

パフォーマンスのために、私はRedisのホップ数を最小限に抑える必要があります。私はスクリプトに渡すことができますどのように複数のHMSETからRedisへの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" 

:私はC++コードからHMSETを複数回呼び出していると私は調査しています、Luaのスクリプトを使用してこれを変更することpoosibleある場合やRedisの1回の呼び出しで複数のRedisのハッシュキーを設定しました複数のハッシュキーと複数のフィールド/値?

== UPDATE Itamarハーバーのコメントに基づいて、私は私の問題は、KEYSと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

関連する問題