java - Hibernate 缓存导致@Cacheable 实体的低百分比性能下降?

标签 java hibernate second-level-cache

我有一个使用 Hibernate 持久性库的 Java 应用程序,其中包含大约 100 个映射类。为了尝试二级缓存,我将 @Cacheable 添加到映射类中的 5 个。这导致标准计算任务花费的时间是以前的两倍,尽管缓存项有几次命中(如 Couchbase 缓存监控控制台所示)。由于 Couchbase 统计数据的 transient 特性,我无法获得准确的平均命中率,但我估计它大约只有 10-20%。

为某些实体启用缓存是否会影响其他未标记为@Cacheable 的实体的访问时间,从而导致性能下降? 或者仅仅是由于缓存查询的延迟增加以及缓存项的低命中率造成的?

我正在使用 Hibernate 3.3。我已禁用查询缓存。使用 Memcached 和 GemFire 作为缓存提供程序时,我得到了类似的结果。

最佳答案

好吧,我想这取决于缓存提供程序如何查看条目是否被缓存。如果这是一个昂贵的操作,如果缓存命中率很低,从数据库中检索数据将是昂贵的。一般来说,缓存提供商应该努力使它尽可能便宜。例如,在 Infinispan 的情况下,这是一个简单的内存检查,以查看实体是否被缓存,如果没有,则通过 Hibernate 从数据库中检索条目,Infinispan 缓存提供程序将其放入缓存中使用一个非常有效的 put 操作称为 putForExternalRead .

您真的应该试试 Infinispan 缓存提供程序。更多信息在 https://docs.jboss.org/author/x/FgY5 .如果您在 JBoss AS7 中运行,请阅读 https://docs.jboss.org/author/x/LoJ7相反。

免责声明:我是一名 Infinispan 开发者。

关于java - Hibernate 缓存导致@Cacheable 实体的低百分比性能下降?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991833/

相关文章:

Java StringTokenizer 有 2 个参数?

Java比较泛型类型

java - 使用setParameter或setParametrList删除数据HQL奇怪

java - Spring + Hibernate 审计(无 Spring Data)

c# - NHibernate:二级缓存过期

Java 推理 : type variable with an upper bound that is an array type

java - Spring MVC 应用程序启动时出现奇怪的错误

java - 从 war 中外部化应用程序上下文和 hibernate.properties

asp.net-mvc - 从单个 Web 服务器迁移到多个 Web 服务器负载平衡环境时的 Nhibernate 二级缓存问题

hibernate - 如何启用 infinispan-configs.xml 的namedCache "entities",以用于支持其namedCache "local-query"