memcached
可用于缓存静态数据,这可以减少数据库查找,并且通常不会memcached.get(id)
and memcached.set(id)
.
但是,将其用于锁定机制可以吗?做memcache.set
and memcached.get
如果存在数据,则始终提供数据,或者如果请求花费太多时间,它只会返回 None 吗?
我想避免并发访问由 a 标识的特定资源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
and get
如果数据可用,无论花费多少时间,实际上都会提供数据,或者是否会在尽可能短的时间内从我发现的任何内容中给出最佳结果(例如:保证 memcached 锁 https://stackoverflow.com/a/6538938/452102)到目前为止属于前一类,可能不适用于锁定,尽管它可能在 99% 的情况下都有效。
谁能澄清一下是否有替代的锁定机制?
对于对此感兴趣的任何人,我在 Memcached Github 上创建了一个线程:memcached 能否可靠地实现锁定机制? https://github.com/memcached/memcached/issues/163。它解释了使用时的一些常见注意事项get
and set
以及如何避免使用add
。有些博客也解释了这个问题,如果你可以搜索一下distributed locking
using memcache
在您最喜欢的搜索引擎上。
还有一个相关问题Memcached、锁定和竞争条件 https://stackoverflow.com/questions/1608902/memcached-locking-and-race-conditions这可能有助于更清楚地了解内存缓存竞争条件。
Memcache 论坛上有更多关于此问题的讨论:
Thread 1 https://groups.google.com/d/topic/memcached/Szb0tsR72HQ/discussion and Thread 2 https://groups.google.com/forum/#!topic/memcached/thhwPzg0O9U/discussion
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)