我已升级到appengine sdk 1.8.0,appengine DN 2.1.2和DN 3.1.3。 一切顺利。
在appengine docs中声明
Level2 Caching is enabled by default.
https://developers.google.com/appengine/docs/java/datastore/jpa/overview-dn2
我假设JPA L2缓存由memcache支持。
但是当我通过数据存储区查看器更新实体时,JPA代码仍然返回过时的数据版本。
我的JPA实体位于
之下@Entity
@Cacheable(true)
@NamedQueries({ ....snip
public class GeoLocationUser implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
private double latitude;
查询是命名查询
@NamedQuery(name = GeoLocationUser.FIND_BY_USER_KEY,
query = "Select p from GeoLocationUser p where p.parentKey = :userKey"),
使用JPA代码创建实体。
我使用数据存储区查看器从“0.0”更新实体中名为“纬度”的字段。
我使用JPA对我的应用程序运行了一个宁静的查询。
返回的实体有'latitude'='0.0'
然后我刷新memcache
我使用JPA对我的应用程序运行了一个宁静的查询。
返回的实体有'latitude'='0.0'
JPA代码正在收集陈旧的数据,我不知道为什么。
Q1.对我观察到的行为的任何解释我都非常感激。
Q2。是由memcache支持的appengine DN 2.1.2?
感谢 -lp
答案 0 :(得分:1)
从日志看来确实是2级缓存“软”是默认值。 不知道究竟是什么'软'意思。
然而,似乎1级缓存导致上述行为。
当我停止正在运行的实例时,下一次调用导致新实例具有新的1级缓存。然后返回新值。
非常令人印象深刻的缓存人员。 做得好。
-lp