【问题标题】:GAE MemCache behaviour of put() + ADD_ONLY_IF_NOT_PRESENTput() + ADD_ONLY_IF_NOT_PRESENT 的 GAE MemCache 行为
【发布时间】:2011-12-26 05:26:06
【问题描述】:

GAE 的 memcahe API 的 put(...) 方法接受 SetPolicy 参数作为参数(在其中一个重载实现中)。在 Javadocs here 中,如果您选择“ADD_ONLY_IF_NOT_PRESENT”作为策略,我会引用:

“有助于避免竞争条件。”

我的问题是:

  1. 使用相同键设置的过期值会发生什么?如果我向 memcache 添加类似 (key=1, value=whatever) 的内容,则此条目将过期,然后我尝试使用 ADD_ONLY_IF_NOT_PRESENT 添加 (key=1, value=whatever2) 是否添加到缓存中?

  2. “对竞争条件有用”是什么意思?更具体地说,这是否意味着如果我将put(...)ADD_ONLY_IF_NOT_PRESENT SetPolicy 一起使用,我不再需要使用getIdentifiableputIfUntouched 来避免同时向内存缓存添加内容时出现竞争条件?

【问题讨论】:

    标签: google-app-engine memcached


    【解决方案1】:
    1. 如果该值过期,则不再存在于 memcache 中,因此 RPC 将设置它。

    2. 如果您执行 get 操作,那么只有在没有任何内容时才执行 put,您引入了一种竞争条件,在您检查时其他人可能已经放置了数据。执行单个操作可以避免这种情况。

    【讨论】:

    • 谢谢,这是一个非常明确的答案。但是我发现使用 putIfUntouched 和 getIdentifiable 有点乏味,因为这意味着我必须在本地(到我当前的应用程序实例)存储我为某个键检索到的所有最后一个对象,以便将它们与 putIfUntouched 方法一起使用。 .
    猜你喜欢
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2012-12-03
    • 2018-11-16
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多