我尝试通过简单地用更新的值覆盖它来更新我的appengine实体。它在数据存储查看器中正确显示,但是当我尝试在我的应用程序中检索它时,它有时会提供较旧的值,有时会更新。 我正在使用Objectify
@ApiMethod(name = "saveUser")
public void saveUser(User user) {
ofy().save().entity(user).now();
}
@ApiMethod(name = "getUser")
public User getUser(@Named("gdgId") Long id) {
return ofy().load().type(User.class).id(id).now();
}
所以我打电话,在我想插入/更新用户时保存用户,并调用getUser来检索与id关联的用户对象。 我没有使用缓存(@Cache注释)
答案 0 :(得分:1)
来自Objectify文档:
每个Objectify实例都包含已经存在的实体缓存 在那个会话中加载。这可以防止其中的后续负载 需要出去到数据存储区的会话。缓存保持不变 实体实例和(事务除外)将 始终返回相同的实际对象实例。
此缓存与启用/禁用的全局内存缓存分开 @Cache注释和Objectify.cache()参数。
请注意,省略@Cache注释不会禁用此缓存行为。
答案 1 :(得分:0)
确保您的应用程序中已安装ObjectifyFilter
。我建议这看起来像最终的一致性,但是你正在执行一个非常一致的按键操作。所以看起来会因缺少过滤器导致会话缓存渗透。