EHCache如何实现其事务?

2024-02-16

这个问题可能听起来很模糊,但我试图理解 EHCache 事务能力的一般概念。
假设我将 EHCache 配置为内存缓存,并且还将其配置为缓存MyObject.
EHCache是​​否克隆实例MyObject我正在检索这是否是作为交易的一部分完成的?

我问主要是因为有人建议我(在我的回答中)question https://stackoverflow.com/questions/3966346/how-to-wrap-an-object-change-in-my-own-transaction-and-incorporate-it-with-hibern)使用 EHCache,我担心它的性能影响。MyObject是一个中等重量的物体,我不想不必要地重复它。
另外,为了验证一下,EHCache 仅在事务中阻止写入对象,对吗?

Thanks,
Ittai


我认为文档的以下部分有关JTA http://ehcache.org/documentation/jta.html支持回答了您的大部分问题:

使用 JTA 缓存

全有或全无

如果为 JTA 所有启用了缓存 对它的操作必须在一个时间内发生 事务上下文,否则TransactionRequiredException将 抛出。

改变可见性

Ehcache提供的隔离级别 JTA 是READ_COMMITTED。 Ehcache是​​一个XAResource。完整的两阶段提交是 支持的。

具体来说:

  • 对缓存的所有变异更改都是事务性的包括put, remove, putWithWriter, removeWithWriter and removeAll.
  • 本地 JVM 中或跨集群的变异更改不可见 直到COMMIT已被调用。
  • 在那之前,请阅读诸如cache.get(...)通过其他交易 将返回旧副本。读取不 堵塞.

后写式和直写式

如果正在使用启用 XA 的缓存 对于写入器,写入操作将 排队直到事务提交 时间。仅采用直写式方法 将有其潜在的 XAResource 参与同一交易。 后写式虽然支持,但应该 可能不与 XA 一起使用 事务性缓存,作为操作 永远不会成为同一个的一部分 交易。你的作家也会是 负责获取新的 交易...

将直写与非 XA 一起使用 资源也可以工作,但是有 不保证交易将 写操作成功后有 已成功执行。上 另一方面,任何抛出的异常 在这些写操作期间 导致交易被滚动 通过拥有回来UserTransaction.commit()扔一个RollbackException.

关于性能,我不会太担心,除非您的对象重达数百 MB。但如果这确实是一个问题,那就衡量一下(一如既往)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EHCache如何实现其事务? 的相关文章

随机推荐