Sno*_*man 5 python google-app-engine memcached
通常我这样做:
if not memcache.get('mykey'):
memcache.set('mykey', item)
Run Code Online (Sandbox Code Playgroud)
但是,今天我看到memcache.add(),只有当项目尚不存在时才会添加项目.那么这相当于我上面的代码吗?我可以用上面的代码替换memcache.add()吗?
此外,更重要的是,我将Appstats,并在RPC调用跟踪,我去看看我的请求调用memcache.set()或get()或datastore.put()或get().当使用上面的两行代码时,我没有看到任何内容memcache.set(),这是预期的.但是,仅使用memcache.add()(不检查项是否已存在)始终调用memcache.set(),即使memcache.add()返回false(表示未插入新项).为什么会这样?
您当前的代码存在争用条件:在检查内存缓存中是否存在值并将其插入之间,另一个进程可能已插入了一个值,您现在将覆盖该值。使用memcache.add不会受到这种竞争状况的影响。
我不确定第二个问题是什么意思。调用memcache.add应仅导致添加呼叫,而不会导致设置呼叫。您可以包含在这种情况下运行的代码吗?
| 归档时间: |
|
| 查看次数: |
3971 次 |
| 最近记录: |