2011-11-10 33 views
1

GAE的memcahe API的put(...)方法接受作爲參數(在它的一個重載實現中)SetPolicy參數。在Javadocs here它是,如果您選擇「ADD_ONLY_IF_NOT_PRESENT」作爲政策,並且我引述:GAE MemCache行爲的put()+ ADD_ONLY_IF_NOT_PRESENT

「用於避免競爭條件。」

我的問題是:

  1. 什麼與設置使用相同的密鑰過期值happends?如果我加入的memcache像(鍵= 1,值=等等),那麼這個項過期,然後我嘗試使用ADD_ONLY_IF_NOT_PRESENT被whatever2添加到高速緩存或不加(鍵= 1,值= whatever2)?

  2. 是什麼意思「的比賽條件非常有用」?更具體地講,這是否意味着,如果我用put(...)ADD_ONLY_IF_NOT_PRESENT SetPolicy我不再需要使用getIdentifiableputIfUntouched爲了避免競爭條件concurrentlly添加的東西到內存緩存的時候?

回答

1
  1. 如果值到期,它不是在內存緩存了,所以RPC將設置它。

  2. 如果你做一個GET,然後做一個只放,如果沒有在那裏,你已經引入了競爭條件,其中其他人可能已經把數據,而你正在檢查。做一個單一的操作避免了這一點。

+0

感謝名單,這是一個非常明確的答案。但是我覺得有點乏味使用putIfUntouched和getIdentifiable,因爲這意味着我必須在本地(以我目前的應用實例)存儲所有我的某些關鍵檢索的最後一個對象,以與putIfUntouched方法使用它們.. 。 –