![](/img/trans.png)
[英]hibernate 2nd level cache via ehcache with Terracotta - Not caching at all?
[英]Caching (Ehcache) - Hibernate 2nd level cache and Spring
在我的Web应用程序(Spring 3.1,Hibernate 4)中,我使用Ehcache进行Hibernate二级缓存和Spring @Cache。 我想知道,在哪里使用Hibernate Cache和Spring Cache?
例如,我有几个域类(在数据库中查看),我在屏幕上使用它作为查找值。 我可以使用Hibernate二级缓存和Spring @Cache缓存它们。
因此,在我的服务层中,如果我使用Spring @Cache缓存这些域对象,我会收到这些对象,而不会在缓存时完全访问持久层(hibernate HQL查询)。 这是正确的方法吗?
取决于您的图层架构。
假设您有三个服务(或同一服务中的三个方法)都返回一组Customer
实体,即域对象。 如果在服务层缓存,则单个数据库记录的相同表示很可能会多次存在于缓存中。 它们是基本相同信息的多个对象。 为什么? 因为Service.getWhateverCustomers(String)
和Service.getWhateverCustomers(String, Integer)
结果存储在两个不同的缓存键下。
如果您使用JPA @Cachable批注在实体级别进行缓存,则无论您使用哪种服务或服务方法调用实际检索实体的代码,都会缓存您的Customer
实体。 当然,关于JPA提供者何时/可以缓存实体的规则适用。 如果你不熟悉它们,请阅读它们。
希望这能让您了解要遵循的路径。 如果您有更多问题,请发布后续评论,我将编辑此答案。
正确的方法是:
这个故事的寓意是你没有缓存,因为它很酷。 您缓存性能。 而且只有在证明有必要时才会优化代码 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.