memcached可以用于锁定吗?

时间:2016-05-26 10:46:09

标签: locking memcached

memcached可用于缓存静态数据,从而减少数据库查找,通常memcached.get(id)memcached.set(id)

然而将它用于锁定机制是否可以?如果数据存在,memcache.setmemcached.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这样可以吗? setget实际上是否会提供数据,无论花费多少时间,或者在最短的时间内从我找到的内容中获得最佳结果(例如:Guaranteed memcached lock到目前为止属于前一类,可能不适用于锁定思想它可能在99%的时间内起作用。

任何人都可以澄清,是否有其他锁定机制?

1 个答案:

答案 0 :(得分:3)

对于任何有兴趣的人,我在Will memcached work reliably for implementing a locking mechanism?的Memcache Github上创建了一个帖子。它解释了使用getset的一些常见警告以及如何使用add来避免这种情况。如果您可以在自己喜欢的搜索引擎上使用distributed locking搜索memcache,某些博客也会解释此问题。

还有一个相关的问题Memcached, Locking and Race Conditions可能有助于更清楚地了解记忆卡的竞争条件。

以下是Memcache论坛的更多讨论:

Thread 1Thread 2