来自缓存文档:https://github.com/objectify/objectify/wiki/Caching
{$order->getUniqReference()}
和
The session cache is local to the Objectify instance. If you start a new session (via ObjectifyFactory.begin()), it will have a separate cache. If you use the thread-local ObjectifyService.ofy() method, the session cache will "just work" appropriately.
我的问题是:
请求1由实例A提供:对象已更新并保留。由于对象已被修改,会话缓存将更新。
请求2由实例B提供(由于先前的请求,会话缓存中已经有对象):会话缓存将是不同的,因为它是另一个实例。 请求如何获得更新的实体而不是之前的实体?
App Engine内存缓存是跨实例共享的,但每个实例(甚至是Objectify实例)的会话缓存都是单个。
会话缓存是否以某种方式在所有实例之间同步?
不同实例提供的不同请求是否可能具有同一对象的不同版本?
答案 0 :(得分:3)
客观化会话是短暂的,并定义了自己的范围。它通过使用内存来防止多个数据存储区在代码的不同部分中为同一个实体获取,假设额外的调用通常是浪费的。
如果您需要读/写一致性,那么您必须使用幂等事务(它不会共享会话缓存,也会进行脏检查并自动重试)。
通过阅读,变异,然后在交易中写作,你总是避免在其他请求中发生的事情(在其他情况下或其他情况下)
Objectify会话默认情况下不是共享的,绝对不应该。它们不会跨请求或实例同步。您可以通过在实体上放置@Cache来启用直写缓存来使用内存缓存,但这与常规会话不同。