memcached
可用于缓存静态数据,从而减少数据库查找,通常memcached.get(id)
和memcached.set(id)
。
然而将它用于锁定机制是否可以?如果数据存在,memcache.set
和memcached.get
是否总是提供数据,或者如果请求花费太多时间,它是否会返回None?
我想避免同时访问由id
标识的特定资源,并使用此逻辑:
def access(id):
if memcache.get(id):
return access
else:
memcache.set(id)
return true
如果有任何用户尝试访问该资源,如果memcache.get(id) = username
返回值,我们拒绝访问,否则我们会memcache.set(id) = username
停止后续访问并允许当前用户访问。
这样使用memcached
这样可以吗? set
和get
实际上是否会提供数据,无论花费多少时间,或者在最短的时间内从我找到的内容中获得最佳结果(例如:Guaranteed memcached lock到目前为止属于前一类,可能不适用于锁定思想它可能在99%的时间内起作用。
任何人都可以澄清,是否有其他锁定机制?
答案 0 :(得分:3)
对于任何有兴趣的人,我在Will memcached work reliably for implementing a locking mechanism?的Memcache Github上创建了一个帖子。它解释了使用get
和set
的一些常见警告以及如何使用add
来避免这种情况。如果您可以在自己喜欢的搜索引擎上使用distributed locking
搜索memcache
,某些博客也会解释此问题。
还有一个相关的问题Memcached, Locking and Race Conditions可能有助于更清楚地了解记忆卡的竞争条件。
以下是Memcache论坛的更多讨论: