Hibernate(六)--缓存策略

 

缓存:sql

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

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

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

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

 

一级缓存(Session):性能

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

 

 

 

 

 

 

二级缓存(SessionFactory):hibernate

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

 

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

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

 

 

 

ehcache.xml配置文件

 

 

 result:

相关文章
相关标签/搜索