python - 使用 memcache.add() 而不是 set()

标签 python google-app-engine memcached

通常我这样做:

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/

相关文章:

python - 如何判断 Python 程序在运行时启用了哪些来自 '__future__' 的编译指示?

google-app-engine - 谷歌应用引擎 : how to use downloaded data using the development server?

eclipse - Aptana Studio 3 + App Engine Python + 无法解析内存缓存的某些方法

google-app-engine - GCS bucket Java 客户端 api 中的通配符

google-app-engine - 提供另一个版本的谷歌应用引擎应用程序 - 自定义子域 SSL

java - 从内存缓存中转换 Java 对象的最快方法

python - 如何检查 memcached 是否正在运行,如果不是从 python 启动它?

python - 有没有办法确定 Linux PID 是否暂停?

python - 在 centos 6.8 上安装 odoo 10 期间出现 pip 错误

python - 有没有办法使用 python 修改现有的 xlsm 文件?