Q1: 我是对的,只有这些供应商支持集群上的Hibernate L2缓存吗?
Q2: Hibernate L2缓存有什么替代品吗? (也许有些DB缓存?)
答案 0 :(得分:10)
Q1。 EhCache可以很好地分发Hibernate L2 Cache。 我们正在将此用于我们的项目。
Q2。有几种缓存是可能的。
但是,数据库存在问题 缓存是它在物理上的 数据库服务器,所以每个查询 涉及网络呼叫(延迟, 带宽..)。这就是重点 应用程序中的缓存 服务器
在分布式环境中,这经常发生 转化为无效的 他们中的一个时的类别 实体被修改,这是功能上的 对我们来说是合乎逻辑的 表现,否则我们会 必须使所有这些无效 实体;这是因为缓存 使整个区域无效,或者a 特定的对象,但在 你必须循环,这对性能不利)
其他人我肯定......
因此,这种情况与数据库无关,它通常不存储我们的Hibernate实体。我们将其放在业务层(而不是数据访问或Daos)中,使其直接可用于业务代码。请注意,对于我们来说,它不是透明缓存,而是对显式业务服务的调用(负责此缓存:如果数据不存在则加载它,根据需要使其无效)执行操作或传递值。
此缓存中一个有趣的线程问题:因为我们的一百个Web线程访问了这个缓存,所以它需要是线程安全的。您可能知道为什么线程安全值在每次调用时都是不可变的或克隆的(这通常是性能问题)。因此,我们所有的业务缓存都使用不可变对象,性能也很好。
答案 1 :(得分:2)
你也可以使用[Infinispan(JBoss Cache的演变)作为二级缓存提供商!] [1]
[1]:见http://infinispan.blogspot.com/2009/10/infinispan-based-hibernate-cache.html
答案 2 :(得分:1)
EhCache有一个分布式模式,但我不确定Hibernate是否支持它。但我不明白为什么它不应该起作用。
您是否出于某些特定原因省略了JBossCache 3?
答案 3 :(得分:0)
hibernate-redis lib将是完美的选择。这是一个基于Redis的缓存。
为何选择Redis?它非常快速,可以在云中运行,并且具有像AWS Elasticache这样的现成云解决方案,因此您无需自己管理它。