分布式环境中的JPA PersistenceContext

分布式环境中的JPA PersistenceContext,jpa,distributed,cpu-cache,Jpa,Distributed,Cpu Cache,根据我的理解,交易完成后不会立即刷新。它们位于内存中的缓存中,只有在EntityManager确定这样做是经济高效的情况下才会写入数据库。我相信在这种情况下会使用一级缓存,但如果我错了,请纠正我 我的问题是,在分布式环境中,持久性上下文使用的缓存是分布式的吗 一级缓存(会话缓存、持久性上下文)始终以相同的方式工作,无论您的环境是分布式的还是非分布式的。会话缓存属于一个会话,您可以在同一台机器上或不同的机器上拥有多个会话,因此这并不重要 在分布式环境中,如果使用二级缓存,则需要关心它 如果您在集群

根据我的理解,交易完成后不会立即刷新。它们位于内存中的缓存中,只有在EntityManager确定这样做是经济高效的情况下才会写入数据库。我相信在这种情况下会使用一级缓存,但如果我错了,请纠正我

我的问题是,在分布式环境中,持久性上下文使用的缓存是分布式的吗

一级缓存(会话缓存、持久性上下文)始终以相同的方式工作,无论您的环境是分布式的还是非分布式的。会话缓存属于一个会话,您可以在同一台机器上或不同的机器上拥有多个会话,因此这并不重要

在分布式环境中,如果使用二级缓存,则需要关心它

如果您在集群中运行应用程序,则需要使用支持集群的二级缓存实现,前提是JPA提供程序支持它(例如,请参阅Hibernate文档)


如果有其他应用程序访问同一数据库,则需要仔细配置缓存策略,以避免在关键情况下出现不一致,并容忍在其他情况下可能出现的不一致。

我想我想知道一级缓存在群集环境中运行时是如何工作的。我不确定我是否理解它在分布式和非分布式环境中如何以相同的方式工作。例如,当群集时,二级缓存数据被复制。当您在一台计算机上或跨多台计算机进行群集设置时,就会发生这种情况。对于一级缓存,数据是否在集群环境中复制?@citress:会话缓存属于属于特定机器的特定会话,因此不需要复制会话缓存。这并不意味着痛苦,我只是想理解。会话缓存属于特定会话,但该会话可能并不总是在同一台机器上结束,对吗?在故障转移可用的集群环境中,如果JVM宕机,会话及其缓存必须在其他地方可用,不是吗?@citress:也许我在这里使用了一个不明确的术语。会话指的是持久性上下文(Hibernate会话),而不是HTTP会话。有人告诉我,当进入select查询时,EM将刷新持久性上下文中的事务。如果这是真的,并且持久性上下文没有分布在Hibernate会话中,那么我们可能会陷入这样一种场景:用户在一个会话中查询数据,但数据可能仍然位于缓存中,等待在另一个会话中刷新?