Java 休眠二级缓存。集群上的读写或事务缓存并发策略?
我正试图找出我的应用程序应该使用哪种缓存并发策略(尤其是实体更新)。该应用程序是一个使用Hibernate开发的web服务,部署在AmazonEC2集群上,在Tomcat上工作,因此那里没有应用服务器 我知道,对于可以更新的数据,有非严格的读写\读写和事务性缓存并发策略,并且Hibernate有成熟的、流行的、生产就绪的2L缓存提供程序:Infinispan、Ehcache、Hazelcast 但是我并不完全理解Hibernate文档中事务缓存和读写缓存之间的区别。我原以为事务性缓存是集群应用程序的唯一选择,但现在(在阅读了一些主题之后),我不太确定这一点 所以我的问题是关于读写缓存。集群安全吗?它是否保证数据库和缓存之间的数据同步以及所有连接的服务器之间的同步?或者它只适用于单服务器应用程序,我应该始终更喜欢事务性缓存 例如,如果更新实体字段(名字等)的数据库事务失败并已回滚,读写缓存会放弃更改,还是只将坏数据(更新的名字)填充到所有其他节点? 这是否需要JTA交易 主题是: “读写”是一个有趣的组合。在此模式下休眠 它本身是一个轻量级XA协调器,因此不需要 完全成熟的外部XA。简要说明其工作原理:Java 休眠二级缓存。集群上的读写或事务缓存并发策略?,java,hibernate,caching,cluster-computing,second-level-cache,Java,Hibernate,Caching,Cluster Computing,Second Level Cache,我正试图找出我的应用程序应该使用哪种缓存并发策略(尤其是实体更新)。该应用程序是一个使用Hibernate开发的web服务,部署在AmazonEC2集群上,在Tomcat上工作,因此那里没有应用服务器 我知道,对于可以更新的数据,有非严格的读写\读写和事务性缓存并发策略,并且Hibernate有成熟的、流行的、生产就绪的2L缓存提供程序:Infinispan、Ehcache、Hazelcast 但是我并不完全理解Hibernate文档中事务缓存和读写缓存之间的区别。我原以为事务性缓存是集群应用程
提前谢谢 到目前为止,我只看到集群2LC使用事务性缓存模式。这正是Infinispan所做的,事实上,Infinispan到目前为止还没有实现其他缓存并发模式。为了减轻事务负担,Infinispan通过事务同步与Hibernate进行集成,而不是XA。差异摘要
- 非严格R/w和R/w都是异步策略,这意味着它们 在事务完成后更新李>
- 事务性是 显然是同步的,并且在事务中更新
- 非严格R/w从不锁定实体,因此总是有可能 肮脏的读物李>
- 读写总是软锁定一个实体,所以 同时访问被发送到数据库。然而,有一个问题 R/w可能不会产生可重复读取隔离的远程机会李>
请随意评论。您的意思是说读写缓存策略是群集安全的,但大多数情况下使用的是事务性的吗?不。读写可以使事情保持一致,但它需要使用某种2PC方法或其他方法来保证集群中的一致性。这取决于2LC的实现。Infinispan选择跳过读写和使用事务,事务用于包含所有操作,并围绕集群进行原子化操作。