我正在致力于实现某些静态数据的缓存。
我有两种方法:
- 使用 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/