当前位置: 首页 > 知识库问答 >
问题:

Infinispan/hibernate二级缓存更新是否非事务性?

太叔睿
2023-03-14

Infinispan作为hibernate二级缓存的更新方式与数据库事务的工作方式不同。我的意思是,在完全提交之前,数据库事务对其他事务不可见。根据日志记录,我观察到事务(JEE MDB)能够部分更新给定的Infinispan更新。具体来说,我的设置如下:

  1. Jboss

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

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

共有1个答案

葛晔
2023-03-14

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

我最初在10年前就开始了这样的设计,Infinispan可以在Hibernate中充当XA资源。这是狗慢。

显然这不是正确的解决方案,所以我们通过html" target="_blank">同步与Hibernate集成,这是一个很大的改进。在这一点上,Infinispan仍然是事务性的,并且会按照您看到的方式行事。

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

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

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

像往常一样,如果您有造成麻烦的特定情况,请务必让我们知道。

p、 我们在这里为不同的环境(local、spring、wildfly)创建了几个Hibernate Infinispan简单教程,所以我建议您看看这些。他们不仅有代码示例,而且有运行良好的配置设置:)。

p、 s.2。这些示例没有在缓存上设置FULL\u XA;)

 类似资料:
  • 尝试使用infinispan作为Hibernate的二级缓存,但总是给我以下错误 org.infinispan.jmx.JMX MBean实例类型=CacheManager, name="DefaultCacheManager"已经在'org.infinispan'JMX域下注册。如果您想允许多个配置了相同JMX域的实例,请在org.infinispan.jmx.JmxUtil.buildJmxD

  • 问题内容: 我想在hibernate项目中使用二级缓存,但是我只对hibernate二级缓存了解一点,任何人都可以解释我应该如何在代码中使用它以及需要什么配置和.jar文件吗?我将这些设置设置为我的hibernate.cfg.xml文件 并添加这些jar文件, 我想知道我是否需要更改其他配置? 我怎么知道我的项目使用二级缓存? 如果只是设置此设置,hibernate将自动使用此设置,否则我必须在我

  • 问题内容: 在工作面试中,一名招聘人员问我“休眠状态中有多少个缓存级别?”。 所以我描述了1级和2级。 他说的是正确的,但也有一个三级缓存,例如,缓存某些不经常更改的表的结果,例如“ CURRENCY”或“ COUNTRY”,然后每隔“ 12/24 /您想要什么时间”重新加载这些表。 我搜索了一下,但是什么也没找到。那么,实际上是否存在第三级缓存还是仅仅是某种功能,如果是,该功能的名称是什么,我该

  • 我们尝试使用infinispan作为带有读锁的远程缓存。客户通过“put”进行读取,以获得钥匙锁,正如悲观事务缓存“When cache.put(k1,v1)返回时”一节中所述的infinispan文档,k1被锁定,集群中任何地方运行的其他事务都无法对其进行写入。仍然可以读取k1。当事务完成(提交或回滚)时,k1上的锁被释放。因此,该场景: 远程缓存配置为具有悲观锁定的事务性缓存: 客户端正在使用

  • 问题内容: 我知道一个事实,它是 Hibernate 使用的一级缓存,一旦我们从中检索到一个实体,便会从而不是从DB中获取具有 相同标识符 的 同一实体 的后续get调用,直到is Open 为止。 话虽如此,我对hibernate如何将第一级缓存与数据库同步感到怀疑吗?考虑以下情形 所以我的问题是 由于从一级缓存中获取,是否具有更新的值? 如果有人在会话打开时直接更新DB并修改User对象,是否

  • 我知道,会话是Hibernate使用的一级缓存,一旦我们从会话中检索到一个实体,对具有相同标识符的同一实体的后续get调用将从会话(而不是数据库)中提取,直到会话(打开)为止。 话虽如此,我对hibernate如何将一级缓存与DB同步表示怀疑?考虑以下场景 所以我的问题是 由于是从1级缓存中获取的,是否有更新的值? 如果有人在会话打开时直接更新DB并修改User对象,是否与DB同步? 提前感谢您的