问题1: 我是否正确,只有这些供应商支持在集群上使用Hibernate L2缓存?
- Terracotta for Hibernate(商业版)
- SwarmCache(自2003年以来未发布)
- JBoss Cache 1.x
- JBoss Cache 2
问题2: 除了Hibernate L2缓存,还有其他替代方案吗?(也许是一些数据库缓存?)
问题1: 我是否正确,只有这些供应商支持在集群上使用Hibernate L2缓存?
问题2: 除了Hibernate L2缓存,还有其他替代方案吗?(也许是一些数据库缓存?)
然而,数据库缓存的问题在于它实际上位于数据库服务器上,因此每次查询都涉及到一个网络调用(延迟、带宽等)。这就是应用服务器上缓存的全部意义。
在我们修改实体的时候,这将导致一个分类无效化,对于我们来说是功能上合理的(对于性能至关重要,否则我们就必须使所有这些实体无效;这是因为缓存无效化整个区域或特定对象,但中间需要循环,这对性能不利)。在分布式环境中,通常这些
当然还有其他的问题...
因此,这种情况与数据库关系不密切,它通常不会存储我们的Hibernate实体。我们将其放置在业务层(而不是数据访问或Daos)中,并直接提供给业务代码。请注意,对于我们来说,它不是一个透明的缓存,而是一个显式业务服务的调用(负责该缓存:如果数据不存在,则加载它,根据需要进行失效处理),执行操作或提供值。
这个缓存中有趣的线程问题:因为这个缓存被我们数百个Web线程访问,所以它需要支持多线程。您可能知道为什么线程安全值要么是不变的,要么在每次调用时克隆(这经常是性能问题)。因此,我们所有的业务缓存都使用不可变对象,而且性能非常好。
EhCache有分布式模式,但我不确定它是否与Hibernate兼容。虽然我不知道为什么它不能工作。
您有没有因某些特定原因省略JBossCache 3?
hibernate-redis 库是一个完美的选择。它是基于 Redis 的缓存。
为什么选择 Redis?因为它非常快速,可以在云端工作,并且有像AWS Elasticache这样的云解决方案,所以您不需要自己管理它。