加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 05:53:11 所属栏目:安全 来源:网络整理
导读:通常我这样做: if not memcache.get('mykey'): memcache.set('mykey',item) 但是,今天我看到了memcache.add(),它似乎只在尚未存在时才添加项目.那么这相当于我上面的代码吗?我可以用memcache.add()替换上面的代码吗? 此外,更重要的是,我正在使用AppStats,
通常我这样做:
if not memcache.get('mykey'):
   memcache.set('mykey',item)

但是,今天我看到了memcache.add(),它似乎只在尚未存在时才添加项目.那么这相当于我上面的代码吗?我可以用memcache.add()替换上面的代码吗?

此外,更重要的是,我正在使用AppStats,在RPC Call Traces下,我看到我的请求是调用memcache.set()还是get()或datastore.put()或get().当使用上面的两行代码时,我没有看到memcache.set()的任何内容,这是预期的.但是,仅使用memcache.add()(不检查项是否已存在)始终调用memcache.set(),即使memcache.add()返回false(表示未插入新项).为什么会这样?

解决方法

您当前的代码有一个竞争条件:在检查memcache中是否存在值并插入它之间,另一个进程可能已插入一个值,您现在将覆盖该值.使用memcache.add不会受到这种竞争条件的影响.

我不确定你的第二个问题是什么意思;调用memcache.add应该只在一个add调用中产生,而不是一个set调用.在这种情况下,你能包含你正在运行的代码吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读