使用Objectify的Appengine memcache到期

时间:2012-04-06 18:18:22

标签: google-app-engine objectify

我在java运行时使用appejine上的objectify。我也通过@Cached注释为几个实体使用memcache。我的问题是在将对象放入数据存储区时对象的行为。放置具有@Cached注释的实体时,是否更新了memcache?或者该实体的任何现有缓存数据现在与数据存储区不同步。当我将一个对象放入数据存储区时,我想更新内存缓存,但是我不知道objectify默认是否这样做,或者我是否需要自己编写。如果更新了内存缓存,那么我的数据的到期时间(或没有到期时间)要高得多。仅供参考我不使用交易。

2 个答案:

答案 0 :(得分:6)

当您使用@Cached时,Objectify会以近乎事务安全的方式为您处理内存缓存的所有更新。它是“接近交易的”,因为虽然它在竞争中不会崩溃,但在极少数情况下它可能会失去同步 - 例如,如果你遇到DeadlineExceededException或OutOfMemoryException并且Google终止你的VM。

对于大多数类型的缓存数据,较长的到期时间是合理的。

答案 1 :(得分:0)

使用Objectify,您在Memcache中的数据永远不会与数据存储区不同步(除了某些旧版本和特殊情况,例如非常不幸的截止日期)。

I Objectify将使Memcache版本失效(所以下一个" get"将转到数据存储区并写入Memcache),而不是更新它,尽管我不确定这个位。无论哪种方式,Objectify都会为你排序。