如何使用Objectify从缓存中获取过时的数据



我一直在尝试调查在启用缓存的情况下使用Objectify时,获得DeadlineExceedException可能会导致哪些行为。

到目前为止,我的实验是这样的:1)存储一个或多个实体,2)然后在剩余的大部分执行时间内休眠,3)在内场循环中进行一些更新,直到请求中止。4) 在单独的请求中检查缓存是否与成功写入数据存储同步。

"某些更新"意味着更改对象中的大量(50)字符串,然后将其写回。我还尝试更新事务中的几个对象,以测试在再次加载实体时是否会得到一些不一致的结果。到目前为止,经过数千次测试,我还没有从缓存中得到任何不一致的实体。

那么,我是否可以以某种方式引发一个可能缓存的实体的加载与数据存储中的实体不一致?

这可能有很多原因。如果您在单个请求中进行更改,您可能会看到会话缓存正在运行:

https://github.com/objectify/objectify/wiki/Caching

如果你在许多请求中进行查询,你可能会看到最终一致性的结果:

https://cloud.google.com/datastore/docs/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore/

也许您看到会话缓存被污染是因为您没有安装ObjectifyFilter?如果你不这样做,Objectify的最新版本会给你一个严重的警告,但也许你正在运行一个旧版本?

最新更新