我在带有 java 运行时的 appengine 上使用 objectify。我还通过 @Cached 注释为多个实体使用 memcache。我的问题是关于将对象放入数据存储区时对象化的行为。放置具有@Cached 注解的实体时,是否更新了内存缓存?或者该实体的任何现有缓存数据现在与数据存储不同步。我希望在将对象放入数据存储区时更新 memcache,但是我不知道 objectify 是否默认执行此操作,或者我是否需要自己编写。如果更新了内存缓存,那么我的数据可以有更长的过期时间(或没有过期)。仅供参考,我没有使用交易。
问问题
460 次
2 回答
6
当您使用 @Cached 时,Objectify 会以一种近乎事务安全的方式为您处理对内存缓存的所有更新。它是“近乎事务性的”,因为虽然它不会在争用中分崩离析,但在极少数情况下它可能会不同步 - 例如,如果您遇到 DeadlineExceededException 或 OutOfMemoryException 并且 Google 终止了您的 VM。
对于大多数类型的缓存数据来说,较长的过期时间是合理的。
于 2012-04-06T18:43:33.810 回答
0
使用 Objectify,您在 Memcache 中的数据将永远不会与 Datastore 不同步(某些旧版本和特殊情况除外,例如非常不幸的截止日期)。
我 Objectify 只会使 Memcache 版本无效(因此下一个“get”将转到 Datastore 并写入 Memcache),而不是更新它,尽管我不确定这一点。无论哪种方式,Objectify 都会为您解决。
于 2012-04-06T18:48:56.373 回答