私は現在Redisテーブルに約50kハッシュを保存していますが、すべて1つに5つのキーと値のペアがあります。一日に一度、ハッシュ値を更新するバッチジョブを実行します。いくつかのキー値をハッシュ内の他のキーの値に設定することもできます。ここでRedis:すべてのハッシュ値を取得する最良の方法
は、キーとセットを反復処理がnew_code値が所与のハッシュのために存在するかどうnew_codeするold_code私のPythonコードです:
pipe = r.pipeline()
for availability in availabilities:
pipe.hget(availability["EventId"], "new_code")
for availability, old_code in zip(availabilities, pipe.execute()):
if old_code:
availability["old_code"] = old_code.decode("utf-8")
for availability in availabilities:
if "old_code" in availability:
pipe.hset(
availability["EventId"], "old_code", availability["old_code"])
pipe.hset(availability["EventId"], "new_code", availability["MsgCode"])
pipe.execute()
それは二回達成するために、私は、キーを反復処理する必要があるように私には少し奇妙です同じ結果が、これを行う良い方法がありますか?
私が理解しようとしている別のことは、最高のパフォーマンスですべてのハッシュ値を取得する方法です。ここで私は現在、それを行う方法です。
d = []
pipe = r.pipeline()
keys = r.keys('*')
for key in keys:
pipe.hgetall(key)
for val, key in zip(pipe.execute(), keys):
e = {"event_id": key}
e.update(val)
if "old_key" not in e:
e["old_key"] = None
d.append(e)
だから、基本的に、私はkeys *
その後、値を取得するためにすべてのキーを越えHGETALL
で反復ありません。これはあまりにも遅く、特に反復です。それを行うより速い方法がありますか?
プログラミング言語を使用せずに、質問の最初の部分、何をする必要があるのかをもう少し詳しく説明できますか? – Malinga
http://stackoverflow.com/questions/38065714/is-there-a-command-in-redis-for-hash-data-structure-similar-to-mget/38066688#38066688ここで私の答えを確認してください – Malinga
すべてのハッシュ/ row現在のコードをnew_codeとして取得し、現在のnew_codeをold_codeとして保存します(以前の状態を記録し、すべてのデータプルでold_codeとnew_codeを比較します)。 –