同じデータにアクセスする必要がある複数のプロセスがあります。アイデアは、これに memcache を使用することでした。しかし問題は、p1 がデータを読み取り、その直後に p2 が同じことを行う場合です。ここで、p1 が変更されたデータを mc に格納すると、p2 が同じ ID を実行すると、p1 が行った変更がオーバーライドされます。これがスレッドと同じプロセスにある場合、ロックを使用します。ただし、これは複数の異なるプロセスで実行できます。Java、Python、php を使用している可能性があります。したがって、memcache はこれには適切な選択ではないようです。ロックとすべてを処理するものを必要としますが、完全にシンプルなキー/値ストレージにする必要があります。これにはいくつかのライブラリまたはシステムがありますか? これはどのように行うことができますか?
質問する
203 次
2 に答える
1
少し創造的に考えれば、Redis を使用してこれを行うことができます。Redis は基本的に memcache と同じですが、永続性 (明らかにオフにしたい) とより多くのデータ型をサポートしています。
以前と同じようにデータをキー値として入力します。
ロックしたい場合は、redis セットを使用します (同じ値を複数持つことはできません)。
https://pypi.python.org/pypi/redis/の redis を使用します
大ざっぱな例
import redis
db = redis.StrictRedis() # This connecteds to the standard redis port on the local machine
isLocked = db.sadd("mylocks", "mykey")
if not isLocked:
data = db.hget("mydata", "mykey")
try:
# do something with data
# ...
# Saving the data
db.hset("mydata", "mykey", data)
except:
pass
# Now to the unlocking part
db.srem("mylocks", "mykey")
ここで mydata は、キーがルックアップ、データが値のハッシュです。mylocks はロックのセットです。何らかの理由でプロセス全体がクラッシュする可能性がある場合は、expire ステートメントを追加する必要があります。
redis に関する情報については、www.redis.io を参照してください。Redis は Linux や Windows などで動作しますが、私の経験では Linux の方が速いと言えます。
于 2013-08-03T16:24:24.967 に答える