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

则所有被缓存的对象,都将使用默认的缓存策略。即:<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用时间戳来决定被高速缓存的结果集是否已经失效。

使用二级缓存的项目建议

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

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

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

转载于:https://www.cnblogs.com/q7q7q72007/p/3738046.html

hiernate二级缓存区域相关推荐

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

    1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...

  2. mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache

    1      查询缓存 1.1  什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在 ...

  3. mybatis教程--查询缓存(一级缓存二级缓存和整合ehcache)

    查询缓存 1 缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. 2 mybat ...

  4. MyBatis框架:延迟加载策策略、一级缓存、二级缓存

    MyBatis框架:延迟加载策略和缓存 Mybatis 延迟加载策略 1.1 何为延迟加载? 1.2 实现需求 1.3 使用association实现延迟加载 1.3.1 账户的持久层DAO接口 1. ...

  5. jedis使用_Mybatis的二级缓存、使用Redis做二级缓存

    什么是二级缓存? 二级缓存和一级缓存的原理是一样的,第一次查询,会将数据放入缓存中,然后第二次查询则会直接去缓存中取.但是一级缓存是基于的sqlSession,而二级缓存是基于mapper文件的nam ...

  6. MyBatisEhcache二级缓存的开启

    mybatis二级缓存对细粒度的数据级别的缓存实现不好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,            此时如果使用myba ...

  7. Mybatis 详解--- 一级缓存、二级缓存

    2019独角兽企业重金招聘Python工程师标准>>> Mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据 ...

  8. 【MyBatis框架】查询缓存-二级缓存-整合ehcache

    mybatis整合ehcache ehcache是一个分布式缓存框架. 1.分布缓存 我们系统为了提高系统并发,性能.一般对系统进行分布式部署(集群部署方式) 如图 不使用分布缓存,缓存的数据在各各服 ...

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

    二级缓存原理 1.原理 首先看图 首先开启mybatis的二级缓存. sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到二级缓存中. 如果SqlSession3去执行 ...

最新文章

  1. #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队
  2. 信号处理之频谱原理与python实现
  3. 前端组件库 - 搭建web app常用的样式/组件等收集列表(移动优先)
  4. python自动化任务_用Python实现真实世界任务的自动化
  5. 从零开始学电脑办公_电脑办公从零开始
  6. Juice Extractor dp
  7. setInterval 和setTimeout 清空定时器,返回值,赋值为null的区别
  8. 谈一谈Java编程开发中虚拟机的内存区域划分?猿们怎么看?
  9. 判断数据表是否存在,不存在则创建
  10. mysql mssql 性能对比_详解mysql分区实验测试--非分区表与分区表的性能对比
  11. 什么是数据增强(Data Augmentation)
  12. 大学教编程的老师为何不去当高收入的程序员?
  13. 如何操作电脑压缩包解压文件?干货技巧!电脑压缩包怎样进行文件解压?
  14. 微信小程序还原手机淘宝首页
  15. 京东秒杀系统是世界上最牛批的,不接受反驳!
  16. openwrt路由器打印机服务器设置_OpenWRT路由器——网络打印服务器
  17. DC-DC电源市场现状及未来发展趋势分析
  18. 「Python 网络自动化」Nornir—— Inventory(主机清单)介绍
  19. ios5.1.1旧版软件下载_苹果iOS 14.1正式版推送 关闭旧版本降级通道
  20. 镁客网每周硬科技领域投融资汇总(12.24-12.30),未来医疗占比猛增,阿里两项亿级投资...

热门文章

  1. Linux 中的虚拟网络
  2. Apache发布Groovy 2.5正式版及3.0预览版
  3. 4.Ext JS Ext.data.Store本地过滤
  4. Java MVC框架性能比较 jsp、struts1、struts2、springmvc3 (转帖)
  5. 让Windows Server 2008+IIS 7+ASP.NET突破默认限制,支持海量并发连接数
  6. 浅谈悲催的“期末考试”
  7. asp.net中使用窗体身份验证
  8. xp与Linux双系统共存
  9. 一种巧妙的drawable.xml替代方案
  10. 具体解释Hibernate中的事务