hibernate一级和二级缓存介绍

一级缓存
Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓
在第一级缓存中,持久化类的每个实例都具有唯一的OID存

。在缓存中的对象,具有持久性,session对象负责管理.一级缓存的优点是使用同一个session对象多次查询同一个数据对象,仅对数据库查询一次
例如:session.load(User.class,1);
      session.load(User.class,1);

。一级缓存采用的是Key-Value的MAP方式来实现的。在缓存实体对象时,对象的主关键字ID是MAP的Key,实体对象就是对象的值。所以说一级缓存是以实体对象为单位进行存储的。访问的时候使用的是主键关键字ID。

一级缓存使用的是自动维护的功能。但可以通过session提供的手动方法对一级缓存的管理进行手动干预。evict()方法用于将某个对象从session的一级缓存中清除。clear()方法用于将session缓存中的方法全部清除。

Hibernate一级缓存是session级别的,所以如果session关闭后,缓存就没了,当我们再次打开session的时候,缓存中是没有了之前查询的对象的,所以会再次发送SQL语句。
Session.get(User.class,1);
Session.close();
Session.get(User.class,1);
二级缓存
Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。
二级缓存分为:
内置:配置文件加载映射文件元数据
外置:第二级缓存
第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。

hibernate的二级缓存允许选用以下类型的缓存插件:
  1,EHCache:可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,对hibernate的查询缓存提供了支持。
  2,OpenSymphony OSCache:可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对hibernate的查询缓存提供了支持。
  3,SwarmCache:可作为群集范围内的缓存,但不支持hibernate的查询缓存。
  4,JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对hibernate的查询缓存提供了支持

  二级缓存默认关闭,需要程序员手动开启。
1.首先导入ehcache.jar二级缓存包。


2.然后,在src下添加ehcache.xml配置,


3.同时,在hibernate.cfg.xml中启用二级缓存
<property name="hibernate.cache.use_second_level_cache"> true</property>
<property name="hibernate.cache.provider_class"> net.sf.ehcache.hibernate.EhCacheProvider</property>。
4.:指定使用二级缓存缓存哪种类型的对象,在hbm.xml中添加<cache region="sampleCache1" usage="read-only"/>

原文地址:https://www.cnblogs.com/Xuesk/p/6858401.html