java - 实现缓存 Spring 方法级注解 vs Hibernate 二级缓存

标签 java spring hibernate caching

我正在致力于实现某些静态数据的缓存。

我有两种方法:

  • 使用 Spring 框架注释使用方法级缓存。
  • 启用二级缓存,以便 hibernate 管理数据缓存

哪种方法效果最好? 我必须考虑哪些事项?

最佳答案

如果一切都平等考虑更喜欢方法调用结果的 Spring 缓存,原因是在服务层级别进行缓存更容易推理。

Hibernate 二级缓存工作正常,但在我看来它更难推理并且有更多缺陷。例如,它不适用于查询,仅适用于通过 ID 查找或加载惰性关联。

实际上惰性关联的加载默认情况下是关闭的,需要在集合级别使用特定于 hibernate 的注释来启用。

要查询查询的结果,您还需要使用查询缓存,它只缓存 Id 和仅返回原始值的查询。然后根据二级缓存解析缓存查询的 ID。

在这两种情况下以及一般的缓存中,问题通常是找到使缓存无效的正确时机。这两种方式都允许在缓存提供程序(例如 ehcache)级别配置过期时间和元素/内存的最大数量。

对于显式的清除缓存,Spring提供了@CacheEvict方法注解,为了对比这里推荐的方式是clearing the Hibernate second level cache .

另请查看这篇写得很好的博文:Truly Understanding the Hibernate Second Level and Query caches .

关于java - 实现缓存 Spring 方法级注解 vs Hibernate 二级缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21537080/

相关文章:

java - org.apache.ibatis.builder.IncompleteElementException : Could not find result map . 为什么?

java - 不可变对象(immutable对象)如何帮助减少垃圾收集带来的开销?

java - 寻找一个简单的Java蜘蛛

java - Selenium 验证 Java 中一个元素是否是另一个元素的子元素

spring - 如何启用 Ehcache 的日志记录

java - 在基于 Java 的配置中使用@Lookup-method

java - Spring bean配置使用单例还是原型(prototype)?

java - 无法 Autowiring 。找不到 ... 类型的 bean

java - Jboss 内置的 hibernate jar 在 eclipse 中看不到,为什么?关于库部署最佳实践的问题

java - 将 hyperjaxb3 升级到 jpa 2.1