实现缓存Spring方法级别注释与Hibernate二级缓存

时间:2014-02-03 20:29:26

标签: java spring hibernate caching

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

我有两种方法:

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

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

1 个答案:

答案 0 :(得分:3)

如果所有事情都等于考虑更喜欢方法调用结果的Spring缓存,那么原因是在服务层级别推理缓存更简单。

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

实际上,默认情况下加载延迟关联是OFF,需要在集合级别使用hibernate特定注释启用。

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

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

为了明确地清除缓存,Spring提供了@CacheEvict方法注释,为了进行比较,这是clearing the Hibernate second level cache的推荐方法。

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