我有多个应该访问相同数据的进程。想法是为此使用memcache。但问题是,如果p1读取数据,那么p2就是这样做的。现在,如果p1在mc中存储已更改的数据,则当p2执行时,相同的id会覆盖p1所做的更改。如果这与线程在同一进程中我会使用锁。但这可以通过多个不同的过程来完成。它可以使用java,python,php。 所以像memcache这样的接缝不适合这个。我需要一些能够处理锁定的东西,但是需要处理完整的键/值存储。 是否有一些lib或系统?如何做到这一点?
答案 0 :(得分: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是一组锁。如果由于某种原因整个过程可能崩溃,您应该向其添加一个过期语句。
www.redis.io了解有关redis的信息。 Redis适用于linux,windows等。但我的经验在Linux上说得更快。
答案 1 :(得分:0)
您最简单的答案可能是将数据放入数据库并让数据库处理仲裁。
大多数数据库提供了一种记录锁定机制,可以用于这种事情,因为数据库的一个基本要素(除了存储数据),是多个用户异步读写记录的能力。