2012-04-06 79 views
-1

我在使用java運行庫的appengine上使用objectify。我也通過@Cached註釋爲幾個實體使用memcache。我的問題是關於將對象放入數據存儲區時的物化行爲。放置具有@Cached批註的實體時,是否更新了內存緩存?或者該實體的任何現有緩存數據現在與數據存儲不同步。我希望在將對象放入數據存儲區時更新memcache,但是我不知道objectify默認是這樣做,還是需要我自己寫這個。如果更新了內存緩存,那麼我的數據可能會有更高的到期時間(或沒有到期)。僅供參考我不使用交易。Appejeine memcache與Objectify到期

回答

6

當您使用@Cached時,Objectify以接近事務安全的方式處理您對memcache的所有更新。這是「近乎事務性的」,因爲雖然它在爭用中不會分崩離析,但在極少數情況下它可能會不同步 - 例如,如果您遇到DeadlineExceededException或OutOfMemoryException並且Google終止您的VM。

大多數類型的緩存數據的過期時間都是合理的。

+1

感謝您的快速響應!這就是我所希望的答案,我相信你是那個如何做出客觀化的人,所以你當然知道你在說什麼。感謝您的工作,它使數據存儲更易於使用! – Patrick 2012-04-06 18:55:34

+0

這個關於直接訪問數據存儲的問題,通過物化來實現?這意味着memcache更新將在數據存儲區回調中處理,因此工作得非常好!我不確定我是否真的瞭解你們在這裏: – honzajde 2013-01-27 23:44:25

0

使用Objectify,您在Memcache中的數據永遠不會與數據存儲不同步(除了一些較舊的版本和特殊情況下,例如真正不幸的截止日期)。我只是無效Memcache版本(所以下一個「get」將去數據存儲並寫入Memcache),而不是更新它,雖然我不知道這一點。無論哪種方式,Objectify都會爲你排序。