我有多个应该访问相同数据的进程。这个想法是为此使用内存缓存。但问题是,如果 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 语句。
www.redis.io 获取有关 redis 的信息。Redis 适用于 linux、windows 等。但我的经验说在 linux 上更快。
于 2013-08-03T16:24:24.967 回答
0
可能您最简单的答案是将您的数据放入数据库并让数据库处理仲裁。
大多数数据库都提供了一种记录锁定机制,可以将其用于此类事情,因为数据库的一个基本要素(除了存储数据)是多个用户异步读取和写入记录的能力。
于 2013-08-03T09:13:35.853 回答