通常我这样做:
if not memcache.get('mykey'):
memcache.set('mykey', item)
但是,今天我看到了 memcache.add()
,它似乎只在项目尚不存在时才添加该项目。那么这是否等同于我上面的代码?我可以用 memcache.add()
替换上面的代码吗?
此外,更重要的是,我正在使用 AppStats,在 RPC 调用跟踪下,我可以查看我的请求是否调用了 memcache.set()
或 get()
或 datastore.put()
或 get()
。使用上面的 2 行代码时,我没有看到 memcache.set()
的任何内容,这是预期的。但是,仅使用 memcache.add()
(不检查项目是否已存在)总是调用 memcache.set()
,即使 memcache.add()
返回 false(意味着未插入新项目)。为什么会这样?
最佳答案
您当前的代码存在竞争条件:在检查内存缓存中是否存在某个值和将其插入之间,另一个进程可能已经插入了一个值,您现在将覆盖该值。使用 memcache.add
不会受到这种竞争条件的影响。
我不确定你的第二个问题是什么意思;调用 memcache.add
应该只会导致 add 调用,而不会导致 set 调用。您能否包含您在这种情况下运行的代码?
关于python - 使用 memcache.add() 而不是 set(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234556/