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

则所有被缓存的对象,都将使用默认的缓存策略。即:<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. springMvc+mybatis+spring 整合 包涵整合activiti 基于maven
  2. 弃用消息队列!这个新一代消息系统,腾讯、华为都用疯了?
  3. Java小结(五)——进制转换
  4. Series与DataFrame数据类型操作基础
  5. Ubuntu安装过程中的问题
  6. Confluence 6 目录中的数据库
  7. Linux系统下 MongoDB安装搭建
  8. VMware虚拟机启动后出现黑屏,挂起关机无响应解决方案
  9. 1. PHP 设计模式---工厂模式
  10. 安卓问题报告小记(四):Some projects cannot be imported because they already exist in the workspace...
  11. 汽车UDS诊断详解及Vector相关工具链使用说明——总述
  12. java outofmemory怎么解决_java.lang.OutOfMemoryError异常解决方法
  13. 利用C#进行CAD二次开发
  14. 污染土壤修复可以采取哪些方式
  15. Visual Studio调试XtraReport脚本
  16. 作战飞机效能评估系统-通用协同效能评估系统软件
  17. word excel转pdf,pdf合并,插入页码
  18. camera--(2)双摄的作用
  19. 淘宝产品详情页 上拉加载图片详情 效果实现
  20. GeneXus项目启动

热门文章

  1. 关于NB-IoT,没有比这篇更通俗易懂的啦!
  2. Linux 用echo输出带特效的字体
  3. 学习使用Markdown最基础的语法(编辑器通用)
  4. centos 6.1_64位系统 双网卡邦定
  5. Android 图片 OOM问题总结
  6. 路由器默认密码(转自ITAA)
  7. .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.
  8. 洛谷——P2872 [USACO07DEC]道路建设Building Roads
  9. xmemcached发布1.3.6
  10. java语言概念及特点相关问题