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% 的情况下都有效。任何人都可以澄清以及是否有其他锁定机制?
最佳答案
对于对此感兴趣的任何人,我在 Memcache Github 上创建了一个线程 Will memcached work reliably for implementing a locking mechanism? .它使用 get
解释了一些常见的警告。和 set
以及如何避免使用 add
.如果可以搜索distributed locking
,有的博客也解释了这个问题。使用 memcache
在您最喜欢的搜索引擎上。
还有一个相关问题Memcached, Locking and Race Conditions这可能有助于更清楚地了解内存缓存竞争条件。
以下是 Memcache 论坛上关于此的更多讨论:
Thread 1和 Thread 2
关于locking - memcached 可以用来加锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37458587/