GAE的memcahe API的put(...)
方法接受一个SetPolicy
参数作为参数(在其中一个重载的实现中)。在Javadocs here中,如果您选择“ADD_ONLY_IF_NOT_PRESENT”作为策略,我会引用:
“有助于避免竞争条件。”
我的问题是:
使用相同密钥设置的过期值会发生什么?如果我添加memcache类似(key = 1,value = whatever),那么这个条目到期,然后我尝试使用ADD_ONLY_IF_NOT_PRESENT添加(key = 1,value = whatever2)是不是添加到缓存中的任何内容?
什么意思“对竞争条件有用”?更具体地说,是否意味着如果我将put(...)
与ADD_ONLY_IF_NOT_PRESENT
SetPolicy一起使用,我不再需要使用getIdentifiable和putIfUntouched以避免在并发添加内容时出现竞争条件到memcache?
答案 0 :(得分:1)
如果值到期,则不再在memcache中,因此RPC将设置它。
如果你做了一个get,那么只有在没有任何东西时才进行put,你引入了一个竞争条件,其他人可能会在你检查时放入数据。单一操作可以避免这种情况。