我通过Wildfly 8.2子系统使用Infinispan 6.0.2。我已经配置了一个事务缓存,它使用基于字符串的JDBC缓存存储来保存放置在infinispan缓存中的内容。
我担心的是,在Infinispan documentation中阅读以下内容后,在同一事务中将多个条目放入/更新/删除缓存时,缓存和缓存存储可能会变得不同步事务在缓存中提交/回滚但在缓存存储中只有部分成功/失败。
4.5。 缓存加载器和事务缓存 当缓存是事务性的并且存在缓存加载器时,缓存加载器将不会被登记在缓存所属的事务中。这意味着可能在缓存加载器级别存在不一致:事务成功应用内存中状态但(部分)将更改应用于存储失败。手动恢复不适用于缓存商店。
如果上述声明仅涉及从缓存存储中加载,如果它也指的是写入商店,请澄清一下。
如果在写入缓存存储时也有这种情况,是否有任何建议的策略/解决方案可以确保缓存和缓存存储保持同步?
这背后的驱动因素是我使用Infinispan进行业务关键数据的直写和过流,并且需要确信缓存存储正确地表示了数据的状态。
上提出了这个问题非常感谢提前。
答案 0 :(得分:3)
它也适用于写入,无法写入存储不会影响事务的其余部分。
原因是实际的持久性API不是事务性的(编辑:Infinispan的新版本支持事务持久性,)。因此,对于两阶段提交(在第一阶段 - 准备 - 获取所有锁定,在第二阶段 - 提交 - 执行写入),在第二阶段执行对存储的写入。因此,失败无法回滚不同节点上的更改。
虽然Infinispan正试图接近强烈一致的内存数据库,但鉴于保证,它仍然是缓存。如果您对设计限制(以及其中一些也是理论限制)更感兴趣,我建议reading Infinispan wiki。