欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Hibernate(六)--缓存策略

程序员文章站 2023-03-26 15:30:51
缓存: 缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问中间层,ORM在查询数据时,首先会根据自身的缓存管理策略,在缓存中查找相关数据,如果发现所需的数据,则直接将此数据作为结果加以使用,从而避免数据库调用性能的开销,而相对内存操作而言,数据库调用是一 ......

 

缓存:

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

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

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

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

 

一级缓存(session):

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

Hibernate(六)--缓存策略

 

 

 

Hibernate(六)--缓存策略

 

 

 

二级缓存(sessionfactory):

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

 

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

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

Hibernate(六)--缓存策略

 

 

Hibernate(六)--缓存策略

 

ehcache.xml配置文件

 Hibernate(六)--缓存策略

 

 result:

Hibernate(六)--缓存策略