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"/>

时间: 2024-08-07 16:41:12

hibernate一级和二级缓存介绍的相关文章

【Hibernate】一级、二级缓存

本文讲述HIbernate中一级.二级缓存的概念以及如何使用. 一.大纲 2.什么是一级缓存 3.一级缓存示例展示 4.二级缓存以及示例展示 5.总结 二.什么是一级缓存 在hibernate中所谓的一级缓存就是session对象,但是一级缓存对提高性能的作用性并不是很大,其session主要的目的是管理实体对象的状态(临时.离线.持久化). 其缓存模型如下图: 三.一级缓存示例 3.1 查询(get,load, HQL) 3.1.1 get/load方法 @Test public void t

hibernate的一级和二级缓存

一级缓存就是Session级别的缓存,close后就没了. 二级缓存就是SessionFactory级别的缓存,全局缓存,要配置其他插件. 什么样的数据适合存放到第二级缓存中? 1.很少被修改的数据 2.不是很重要的数据,允许出现偶尔并发的数据 3.不会被并发访问的数据 4.参考数据 不适合存放到第二级缓存的数据? 1.经常被修改的数据 2.财务数据,绝对不允许出现并发 3.与其他应用共享的数据.         Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一

具体解释Hibernate中的二级缓存

1.前言 这篇博客再前几篇博客的基础上来解说一下.Hibernate中的二级缓存.二级缓存是属于SessionFactory级别的缓存机制. 第一级别的缓存是Session级别的缓存,是属于事务范围的缓存,由Hibernate管理,一般无需进行干预.第二级别的缓存是SessionFactory级别的缓存.是属于进程范围的缓存. 2.Hibernate二级缓存 1.分类 二级缓存也分为了两种 内置缓存:Hibernate自带的,不可卸载,通常在Hibernate的初始化阶段,Hibernate会把

详解Hibernate中的二级缓存

1.前言 这篇博客再前几篇博客的基础上来讲解一下,Hibernate中的二级缓存,二级缓存是属于SessionFactory级别的缓存机制.第一级别的缓存是Session级别的缓存,是属于事务范围的缓存,由Hibernate管理,一般无需进行干预.第二级别的缓存是SessionFactory级别的缓存,是属于进程范围的缓存. 2.Hibernate二级缓存 1.分类 二级缓存也分为了两种 内置缓存:Hibernate自带的,不可卸载,通常在Hibernate的初始化阶段,Hibernate会把映

【11.0】Hibernate缓存机制(一级和二级缓存)

1.  一级缓存,二级缓存,查询缓存: 2.  一级缓存又称为session缓存.生命周期相同.周期较短.事务级别的缓存. get使用了一级缓存,用get查数据时,首先检查缓存中是否有该数据,如果有直接从缓存中取数据,如果没有再查询数据库,并且将数据放入缓存中. load也支持一级缓存.load还支持lazy.当load从数据库中查询数据后,也会将数据放入缓存. 3.  unique/list查询不会去查看缓存,但是list查询的实体对象将会放入缓存中. 4.  iterate会执行查询id的操

hibernate中的二级缓存

二级缓存使用场景:不经常修改的数据,但是经常的访问的数据会放到缓存中去 一级缓存仅仅是session内部的缓存,用来存取sql语句,比如说连续调用两次相同参数的get方法,就是session缓存 二级缓存是sessiionFactory层面的缓存,即不同线程,不同程序之间的缓存 1.在hibernate.hbm.xml中加载配置 <property name="cache.provider_class">org.hibernate.cache.HashtableCacheP

Mybatis一级、二级缓存

一级缓存 首先做一个测试,创建一个mapper配置文件和mapper接口,我这里用了最简单的查询来演示. <mapper namespace="cn.elinzhou.mybatisTest.mapper.UserMapper"> <select id="findUsers" resultType="cn.elinzhou.mybatisTest.pojo.User"> SELECT * FROM user </se

Hibernate+EhCache配置二级缓存

步骤: 第一步:加入ehcache.jar 第二步: 在src目录下新建一个文件,名为:ehcache.xml 第三步:在hibernate配置文件的<session-factory>下配置 配置的具体信息: ehcache.xml的具体配置: <?xml version="1.0" encoding="UTF-8"?> <!-- maxEntriesLocalHeap: 在内存中缓存的element的最大数目. maxEntriesL

Spring 整合 Hibernate 时启用二级缓存实例详解

写在前面: 1. 本例使用 Hibernate3 + Spring3: 2. 本例的查询使用了 HibernateTemplate: 1. 导入 ehcache-x.x.x.jar 包: 2. 在 applicationContext.xml 文件中找到 sessionFactory 相应的配置信息并在设置 hibernateProperties 中添加如下代码: ? 1 2 3 4 5 6 <!-- 配置使用查询缓存 --> <prop key="hibernate.cach