缓存:

  缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问中间层,ORM在查询数据时,首先会根据自身的缓存管理策略,在缓存中查找相关数据,如果发现所需的数据,则直接将此数据作为结果加以使用,从而避免数据库调用性能的开销,而相对内存操作而言,数据库调用是一个代价高昂的过程。

查找数据时,先去缓存中查找是否有此数据,如果有此数据,则直接使用缓存中的数据,不再从数据库中查询,否则去数据库中查询,减少与数据库的交互。

Hibernate缓存包括两大类:一级缓存和二级缓存

  Hibernate一级缓存又被称为“Session的缓存”。Session缓存是内置的,不能被卸载,是事务范围的缓存,在一级缓存中,持久化类的每个实例都具有唯一的OID。
  Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别,第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。

 

一级缓存(Session):

第一次通过id=1获取对象的时候,session中是没有对应缓存对象的,所以会在"log1"后出现sql查询语句。
第二次通过id=1获取对象的时候,session中有对应的缓存对象,所以在"log2"后不会出现sql查询语句

 

 

 

 

 

 

二级缓存(SessionFactory):

 hibernate本身不提供二级缓存,都是使用第三方的二级缓存插件,这里使用的是 EhCache提供的二级缓存, 在hibernate.cfg.xml中开启二级缓存的配置

 

  使用不同的session,都去获取id=1的category,只会访问一次数据库。

  因为第二次获取虽然没有从第二个session中拿到缓存,但是从sessionfactory中拿到了Category缓存对象

 

 

 

ehcache.xml配置文件

 

 

 result:

posted on 2020-01-16 17:17  MyBeans  阅读(244)  评论(0编辑  收藏  举报