2016-09-11 7 views
2

"a"という名前の文字列キーがあり、その値が "b"で、 "b"という名前のハッシュセットがあり、 :Redisパイプライン - アトミック別のキー値の値を取得

"a" (value equals to "b") 

"b": { 
     "first_name": "John", 
     "last_name": "Doe" 

} 

はとても重要な「」私は オブジェクトbの値を受け取りますが与えられたパイプラインを使用することが可能ですか?

ありがとう

+0

コードスニペットと予想される出力の例を挙げることができますか?興味深いと聞こえるが、ちょっと曖昧だ。 – TuanDT

答えて

2

パイプラインは複数の操作を送信するための最適化です。アトミック性は保証されず、応答はパイプラインの実行後にのみ利用可能です。その場合、それはあなたがしようとしているものには適していないように見えます。

IIUCでは、最初のキーの値を参照解除し、2番目のキーのデータを取得する必要があります。私は、あなたが "原子的に"という言葉を使うとき、あなたの意味はサーバへの1回の呼び出しであると考えています。このパターンはRedisではサポートされていません。代わりに、aの値を取得してから、bのHMGETを取得する必要があります。最初getコマンドは、すなわちB本当のキー返すまでお待たなければならないので、

3

パイプラインは、動作しません。

代わりにlua scriptsで達成できます。

local real_key = redis.call('get', KEYS[1]) 
if real_key then return redis.call('hgetall', real_key) end 

luaスクリプト全体がアトミックに実行されます。

関連する問題