GAE MemCache put()+ ADD_ONLY_IF_NOT_PRESENT的行为

时间:2011-11-10 14:21:08

标签: google-app-engine memcached

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以避免在并发添加内容时出现竞争条件到memcache?

1 个答案:

答案 0 :(得分:1)

  1. 如果值到期,则不再在memcache中,因此RPC将设置它。

  2. 如果你做了一个get,那么只有在没有任何东西时才进行put,你引入了一个竞争条件,其他人可能会在你检查时放入数据。单一操作可以避免这种情况。