Infinispan/hibernate 2 级缓存更新不是事务性的?

Posted

技术标签:

【中文标题】Infinispan/hibernate 2 级缓存更新不是事务性的?【英文标题】:Infinispan/hibernate 2nd level cache update not transactional? 【发布时间】:2020-02-22 07:19:00 【问题描述】:

作为休眠二级缓存的 Infinispan 不会以类似于数据库事务工作方式的事务方式进行更新。我的意思是,数据库事务在完全提交之前对其他事务不可见。根据日志记录,我观察到事务 (JEE MDB) 能够对给定的 Infinispan 更新进行部分更新。详细地说,这是我的设置:

    Jboss JPA(休眠) Infinispan 作为二级缓存提供者(本地缓存事务模式 FULL_XA。 JTA 已启用。 数据库设置为 XA 数据源

我似乎看到的是,如果 JEE bean 在事务的 DB 提交后启动并且我认为是 infinispan 更新(提交),它可以看到一些 infinispan 更新(不是数据库事务如何工作并且是不可取的。)请帮助。

另外,请确认 1) 二级缓存仅在事务提交时更新。 2) 我并没有完全疯狂地认为更新应该对其他事务是原子的......要么他们什么都看不到,要么全部看不到。

【问题讨论】:

【参考方案1】:

听起来可能很疯狂,但您要求的缓存非常昂贵:)

我最初是在 10 年前开始使用这种设计的,当时 Infinispan 可以充当 Hibernate 的 XA 资源。这是狗慢。

很明显,这不是正确的解决方案,因此我们开始通过同步与 Hibernate 集成,这是一个很大的改进。在这一点上,Infinispan 仍然是事务性的,并且会按照您看到的方式行事。

事务性 Infinispan 最终被删除,再次出于性能原因,一旦我们弄清楚如何处理没有事务的集群情况。

Hibernate 2LC 的关键在于它应该有助于加速您的应用程序。一致性当然很重要,因此我们确保任何回滚都反映在 Infinispan 中,但是,是的,事务数据可能已经在缓存中。

如果动态数据一致性在某种程度上成为问题,我建议使用乐观锁定,Infinispan 缓存提供程序可以利用它来比较数据版本。所以它可以看到一个旧的数据版本是否在尝试更新一个新的数据版本,但是我们还没有看到这样的情况,因为很多这样的情况是被 Hibernate 本身禁止的。

与往常一样,如果您有特殊情况导致麻烦,请告诉我们。

附言我们为不同的环境(本地、春季、野蝇)创建了几个 Hibernate Infinispan 简单教程here,所以我建议你看看这些。他们不仅有代码示例,而且还有运行良好的配置设置:)。

p.s.2。这些示例没有在缓存上设置 FULL_XA ;)

【讨论】:

链接失效了,但是我想教程现在可以找到here 谢谢 Felix,我已经更新了回复中的链接。

以上是关于Infinispan/hibernate 2 级缓存更新不是事务性的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥操作 2 ** 2 ** 2 ** 2 ** 2 ** 2 会导致python挂掉? [关闭]

PyQt5 基本语法:输入控件

2维码测试

老鼠走迷宫

TCP / IP 协议

VueAxios详解