hiernate二级缓存区域

区域即是一个具有名称的高速缓存块,你可以给每一个高速缓存块设置不同的缓存策略。如果没有设置任何的缓存区域,

则所有被缓存的对象,都将使用默认的缓存策略。即:<defaultCache.../>

对于类而言,区域的名称是类名。如:cn.itcast.domain.Person(一般情况后面会跟一个.data)

对于集合而言,区域的名称是类名加属性名。如cn.itcast.domain.Person.cars(一般情况,后面会跟一个.data)

hibernate的配置属性:hibernate.cache.region_prefix可以给每一个区域配置一个前缀的名称。但这种情况一般发生在一个项目中

有多个SessionFactory的情况。如果一个项目有多个SessionFactory则此配置也是必须的。

以下是示例:ehcache的具名缓存区域配置示例:

<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="ehcache.xsd"

updateCheck="true" monitoring="autodetect"

dynamicConfig="true">

<diskStore
path="d:/a"/>     //指定文件保存路径

<defaultCache    
//配置默认缓存区域,这是必须配置项。如果没有给某个类设置缓存区域,它将使用默认缓存区域

maxElementsInMemory="100"

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="300"

overflowToDisk="true"

/>

<cache
name="cn.itcast.domain.Person
//指定Person类的缓存区域,所有Person类,都会保存在此区域

maxElementsInMemory="2"          
//故意指定内存中放很少的数据,以观察生成的文件大小

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="300"

overflowToDisk="true"

diskPersistent="true"

diskExpiryThreadIntervalSeconds="120"

maxElementsOnDisk="100"

>

</cache>

</ehcache>

测试代码:一次生成多个Person实例,看看生成的文件大小:

Session s1 =
HibernateUtils.openSession();

Person p1 = (Person)
s1.get(Person.class,"11");

Person p2 = (Person)
s1.get(Person.class,"402880e 6346f 5ffe 01346f 6000b50000");

Person p3 = (Person)
s1.get(Person.class,"402880e6347311fa01347311fb 7c 0000");

s1.close();
<!--[if
!supportLineBreakNewLine]-->

1、理解高速查询缓存区域

当某个查询第一次执行时,它的结果被高速缓存在高速缓存区域--注意,这个区域不同于你可能已经配置的任何其他实例或

集合高速缓存区域。这个区域的名称默认为:org.hibernate.cache.StandardQueryCache。

可以通过setCacheRegion(...)方法,给一个特定的查询改变高速缓存区域。

hql = "from Person
where name=‘JackB‘";

list =
s.createQuery(hql)

.setCacheable(true)

.setCacheRegion("itcast")  //改变默认缓存查询区域

.list();

或是显示的设置一个查询缓存区域,以观察它的保存情况:

<cache
name="org.hibernate.cache.StandardQueryCache"   //必须叫这个名称

maxElementsInMemory="2"

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="300"

overflowToDisk="true"

diskPersistent="true"

diskExpiryThreadIntervalSeconds="120"

maxElementsOnDisk="100"

/>

2、时间戳高速缓存区域

如果查询结果高速缓存被启用,另一个始终需要的高速缓存区域也出现了:org.hibernate.cache.UpdateTimestampsCache。

这是Hibernate内部使用的一个高速缓存区域。Hibernate用时间戳来决定被高速缓存的结果集是否已经失效。

使用二级缓存的项目建议


并非所有的类都可以受益于高速二级缓存,因为,能够禁用高速二级缓存也很重要。重申一下,高速缓存通常只对于主要用来读取的

类有用。如果你有更新比读取更经常的数据,就不要启用二级高速缓存,即使所有其他的高速缓存条件都符合!

更新期间,维护高速缓存的代价可能远远超出更快读取的性能受益。

时间: 2024-11-07 18:02:05

hiernate二级缓存区域的相关文章

【MyBatis框架】查询缓存-二级缓存原理

二级缓存原理 1.原理 首先看图 首先开启mybatis的二级缓存. sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到二级缓存中. 如果SqlSession3去执行相同 mapper下sql,执行commit提交,清空该 mapper下的二级缓存区域的数据. sqlSession2去查询用户id为1的用户信息,去缓存中找是否存在数据,如果存在直接从缓存中取出数据. 二级缓存与一级缓存区别,二级缓存的范围更大,多个sqlSession可以共享一个UserMapp

MyBatis之二级缓存

二级缓存与一级缓存区别:二级缓存的范围更大,多个sqlSession可以共享一个UserMapper的二级缓存区域. 每一个mapper都有一个自己的二缓存区域(按namespace区分),两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同 的二级缓存区域中. 二级缓存原理: 开启二级缓存 1. 只需要在你的Mapper映射文件中添加一行:  <cache /> 2.调用pojo类实现序列化接口 若没有指定cache标签的属性值,将采用默认的行为进行

【MyBatis学习13】MyBatis中的二级缓存

1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加清楚的描述二级缓存,先来看一个示意图: 从图中可以看出: sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓存中. 如果SqlSession3去执行相同 mapper下sql,执行commit提交,则会清空该UserMapper下二级缓

10.MyBatis 延迟加载,一级缓存,二级缓存 设置

什么是延迟加载  resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息. 设置延迟加载 需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载. lazyLoadingEnabled.aggressiveLazyLoading 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置懒加载.如果设为'fals

28Mybatis_查询缓存-二级缓存-二级缓存测试-

二级缓存原理: 首先开启mybatis的二级缓存. sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到二级缓存中. 如果SqlSession3去执行相同 mapper下sql,执行commit提交,清空该 mapper下的二级缓存区域的数据. sqlSession2去查询用户id为1的用户信息,去缓存中找是否存在数据,如果存在直接从缓存中取出数据. 二级缓存与一级缓存区别,二级缓存的范围更大,多个sqlSession可以共享一个UserMapper的二级缓存区域

Hibernate4之二级缓存配置

一级缓存.二级缓存.查询缓存 1.什么是缓存 a) 在内存中开辟一块空间,把本来应该存储在硬盘上的东西,放到内存里,将来再要读取的时候,从内存读取,这部分内容就是缓存. 2.什么是一级缓存 a) 即session级别的缓存 3.什么是二级缓存 a) SessionFactory级别的缓存,可以跨越session存在 缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache.缓存目的:让数据更接近于应用程序,协调速度不匹

mybatis学习笔记(13)-查询缓存之二级缓存

mybatis学习笔记(13)-查询缓存之二级缓存 mybatis学习笔记13-查询缓存之二级缓存 二级缓存原理 开启二级缓存 调用pojo类实现序列化接口 测试方法 useCache配置 刷新缓存就是清空缓存 应用场景和局限性 本文主要讲mybatis的二级缓存,二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的. 二级缓存原理 首先开启mybatis的二级缓存. sqlS

Hibernate 二级缓存 总结整理(转)

和<Hibernate 关系映射 收集.总结整理> 一样,本篇文章也是我很早之前收集.总结整理的,在此也发上来 希望对大家有用.因为是很早之前写的,不当之处请指正. 1.缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache(摘自Robbin的<缓存技术浅谈>).目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更快.(请参考http://baike.baidu.com/view/907.htm 了

[MyBatis]二级缓存

二级缓存: Session去执行该Mapper下的查询方法时(第一次查询),会将该查询结果存放在Mapper的二级缓存区域 Session去执行该Mapper下的查询方法时(第二次查询),会判断该Mapper下有没有缓存,如果有,则不向数据库查询,直接取缓存 Session去执行该Mapper下的commit()方法后,则清空该Mapper下的二级缓存 二级缓存与一级缓存的区别: 多个Session可以共享Mapper下的数据,二级缓存是按照Mapper的namespace划分,每一个Mappe