redis データベースを操作するために python パッケージ (redis-py) を使用しています。Redis でハッシュのキーと値を設定するクライアントがたくさんあります。ハッシュが存在する場合にのみキーと値を設定してほしい。ハッシュが存在しない場合、キーと値を設定するとハッシュが作成されますが、これは私がやりたいことではありません。
redis-py ページ (https://github.com/andymccurdy/redis-py) で、著者はクライアント側でアトミック操作を行う方法を提案しました。だから私は同様の関数を書きました:
with r.pipeline() as pipe:
while True:
try:
pipe.watch("a_hash")
if pipe.exists("a_hash"):
pipe.hset("a_hash", "key", "value")
break
except redis.WatchError:
continue
finally:
pipe.reset()
ただし、これは機能しないようです。別のクライアントからハッシュを削除した後も、このハッシュはこのコードによって作成されるため、このコードはアトミック操作ではないと思います。誰かがこのコードの問題を特定するのを手伝ってくれますか? または、この目的を達成するためのより良い方法はありますか?
あなたの助けに感謝!