管理Hibernate的缓存

上传人:宝路 文档编号:22000628 上传时间:2017-11-25 格式:DOC 页数:6 大小:73.85KB
返回 下载 相关 举报
管理Hibernate的缓存_第1页
第1页 / 共6页
管理Hibernate的缓存_第2页
第2页 / 共6页
管理Hibernate的缓存_第3页
第3页 / 共6页
管理Hibernate的缓存_第4页
第4页 / 共6页
管理Hibernate的缓存_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《管理Hibernate的缓存》由会员分享,可在线阅读,更多相关《管理Hibernate的缓存(6页珍藏版)》请在金锄头文库上搜索。

1、1Hibernate 的缓存分为 2 类:Hibernate 第一级缓存: Session 的缓存,在其中,持久化类的每个实例都具有唯一的 OID。Hibernate 第二级缓存: SessionFactory 的外置缓存,是一个可插拔的缓存插件,它由SessionFactory 负责管理。Hibernate 的 二 级 缓 存 策 略 , 是 针 对 于 ID 查 询 的 缓 存 策 略 , 对 于 条 件 查 询 则 毫 无 作 用 。 为此 , Hibernate 提 供 了 针 对 条 件 查 询 的 Query Cache。2 持 久 化 层 的 缓 存 的 并 发 访 问 策 略

2、: ( 每 一 种 策 略 对 应 一 种 事 务 隔 离 级 别 ) 事 务 型 : 仅 仅 在 受 管 理 环 境 中 适 用 , 可 防 止 脏 读 和 不 可 重 复 这 类 并 发 问 题 读 写 型 : 仅 仅 在 非 群 集 的 环 境 中 适 用 , 可 防 止 脏 读 非 严 格 型 : 不 保 证 缓 存 与 数 据 库 中 是 数 据 的 一 致 性 只 读 型 : 对 于 从 来 不 会 被 修 改 的 数 据事 务 型 并 发 访 问 策 略 的 事 务 隔 离 级 别 最 高 , 只 读 型 的 隔 离 级 别 最 低 , 事 务 隔 离 级 别 越 高 ,并 发

3、性 能 就 越 低 , 如 果 第 二 级 缓 存 中 存 放 的 数 据 会 经 常 被 事 务 修 改 。 就 不 得 不 提 高 缓 存的 事 务 隔 离 级 别 , 但 是 这 又 会 降 低 并 发 性 能 , 因 此 , 只 有 符 合 以 下 条 件 的 数 据 才 适 合 于 存放 到 第 二 级 缓 存 中 : 很 少 被 修 改 的 数 据 不 是 很 重 要 的 数 据 , 允 许 出 现 偶 尔 的 并 发 问 题 不 会 被 并 发 访 问 的 数 据 参 考 数 据 ( 供 应 参 考 的 常 量 数 据 )以 下 数 据 不 适 合 存 放 到 第 二 级 缓 存

4、 中 : 经 常 被 修 改 的 数 据 财 务 数 据 , 绝 对 不 允 许 出 现 并 发 问 题 与 其 他 应 用 共 享 的 数 据( 参 考 数 据 有 以 下 特 点 : 它 的 实 例 的 数 目 有 限 每 个 实 例 会 被 许 多 其 他 类 的 实 例 引 用 实 例 极 少 或 者 从 来 不 会 被 修 改 )3.管 理 Hibernate 的 第 一 级 缓 存当 应 用 程 序 调 用 Session 的 save(),update(),saveOrUpdate,load(),get(),find()以 及 调 用 查 询 接口 的 list(),iterat

5、e()或 filter()方 法 时 , 如 果 在 Session 的 缓 存 中 还 不 存 在 相 应 对 象 ,Hibernate 就 会 把 该 对 象 加 入 到 第 一 级 缓 存 中 。 当 清 理 缓 存 时 , Hibernate 会 根 据 缓 存 中 对象 的 状 态 变 化 来 同 步 更 新 数 据 库 .Session 为 应 用 程 序 提 供 俩 个 管 理 缓 存 的 方 法 : evict(Object o): 从 缓 存 中 清 除 参 数 指 定 的 持 久 化 对 象 , 能 够 从 缓 存 中 清 除 特 定 的 持 久化 对 象 ,适 用 于 以

6、 下 情 况 :1. 不 希 望 Session 继 续 按 照 该 对 象 的 状 态 变 化 来 同 步 更 新 数 据 库 。2. 在 批 量 更 新 或 批 量 删 除 的 场 合 , 当 更 新 或 删 除 一 个 对 象 后 , 及 时 释 放 该 对 象 占 用 的内 存 。 clear(): 清 空 缓 存 中 所 有 持 久 化 对 象4管理 Hibernate 的第二级缓存它是进程或群集范围内的缓存,缓存中存放的是对象的散装数据。第二级缓存是可配置的插件,Hibernate 允许选用以下类型的缓存插件: EHCache:可作为进程范围内的缓存,存放数据的物理介质可以是内存或

7、硬盘,对Hibernate 的查询缓存提供了支持。其来自于 Hibernate 开放源代码组织的另一个项目。(net.sf.hibernate.cache.EhcacheProvider) OpenSymohony OSCache:可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的换成数据过期策略,对 Hibernate 的查询缓存提供了支持。其由JBoss 开放源代码组织提供。 (net.sf.hibernate.cache.OSCacheProvider ) SwarmCahche:可作为群集范围内的缓存,但不支持 Hibernate 的查询缓存.(net.sf.hi

8、bernate.cache.SwarmCacheProvider) JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对 Hibernate 的查询缓存提供了支持。 (net.sf.hibernate.cache.TreeCacheProvider)四种缓存插件支持的并发访问策略:缓存插件 只读型 非严格读写型 读写型 事务型EHCache 支持 支持 支持 否OSCahce 支持 支持 支持 否SwarmCache 支持 支持 否 否JBossCache 支持 否 否 支持配置第二级缓存主要包含以下步骤:(1) 选择需要使用第二级缓存的持久化类,设置它的命名缓存的并发访问

9、策略。Hibernate 既允许在分散的各个映射文件中为持久化类设置第二级缓存,还允许在 Hibernate 的配置文件Hibernate.cfg.xml 中集中设置第二级缓存,后一种方式更有利于和缓存相关的配置代码的维护(2) 选择合适的缓存插件,每一种缓存插件都有自带的配置文件,因此需要手工编辑该配置文件。EHCache 缓存的配置文件为 ehcache.xml,而 JBossCache 缓存的配置文件为treecache.xml。在缓存的配置文件中需要为每个命名缓存设置数据过期策略。.ehcahe.xml 文件提示:Hibernate 软件包的 etc 目录下提供了 ehcache.xm

10、l 文件的样例。并且对它的配置元素做了详细的说明。ehcache.xml 的结构说明: 元素:指定一个文件目录,当 EHCache 把数据写到硬盘上时,将把数据写到这个文件目录下。 元素:设定缓存的默认数据过期策略 元素: 设定具体的命名缓存的数据过期策略 属性解释: name 属性 : 设置缓存的名字,它的取值为类的完整名字或者类的集合的名字,如果name 属性为”mypack.Category”,表示 Category 类的二级缓存;如果 name 属性为“mypack.Item”,表示 Item 类的二级缓存;如果 name 属性为 “mypack.items”,表示Category 类

11、的 items 集合的二级缓存。 maxInMemory 属性:设置基于内存的缓存可存放的对象的最大数目eternal 属性 : 如果为 true,表示对象永远不会过期,此时会忽略 timeToIdleSeconds 和timeToLiveSeconds 属性。默认值为 false; timeToIdleSeconds 属性 : 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了 timeToIdleSeconds 属性值,这个对象就会过期,当对象过期,EHCache 将把它从缓存中清除。只有当 eternal 属性为false,设置 ti

12、meToIdleSeconds 属性才有效。如果 timeToIdleSeconds 属性为 0,表示对象可以无限期地处于空闲状态。timeToLiveSeconds 属性 : 设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds 属性值,这个对象就会过期。当对象就会过期,EHCache 将它从缓存清除。只有当 eternal 属性为false,设置 timeToLiceSeconds 属性有效,如果 timeToLiveSeconds 属性为 0,表示对象可以无限期的存在于缓存中。TimeToLiveSec

13、onds 属性值必须大于或等于 timeToIdleSeconds属性值,才有意义。overflowToDisk 属性 : 如果为 true,表示当基于内存的缓存中的对象数目达到了maxInMemory 界限,会把溢出的对象写到基于硬盘的缓存中。提示:每个命名缓存代表一个缓存区域,每个缓存区域有各自的数据过期策略。命名缓存机制使得用户能够在每个类以及类的每个集合的粒度上设置数据过期策略。5配置群集范围内的第二级缓存EHCache 适用于 hibernate 应用发布在单个机器中的场合,如果企业应用需要支持成千上万的用户的并发访问,可以把应用发布到多台机器中,每台机器分担一部分运行负荷,从而提高

14、应用的运行性能。在这种群集环境下,可以用 JBossCache 作为 Hibernate 的二级缓存。接下来简单地介绍把 JBossCache 集成到 Hibernate 中的步骤。 在 Hibernate 配置文件中设置 JBossCache 适配器,并且为需要使用第二级缓存的类和集合设置缓存的并发访问策略。Hibernate.cfg.xml 文件net.sf.hibernate.cache.TreeCacheProvidertrue6.在应用程序中管理第二级缓存只有在 Hibernate 的配置文件或映射文件中为一个持久化类设置第二级缓存,Hibernate 在加载这个类的实例时才会启用第

15、二级缓存,如果把和第二级缓存相关的配置代码都集中放在Hibernate.cfg.xml 文件中,只需把这些代码全部注释掉,就会关闭所有持久化类的第二级缓存。Session 的 ecict()方法用于从第一级缓存中清除一个特定的对象。同样 SessionFactory 有也提供了 evict()方法,用于从第二级缓存中清除对象的散装数据。/清除第二级缓存中 OID 为 1 的 Category 的对象sessionFactory.evict(Category.class,new Long(1);/清除第二级缓存中 Category 类的所有对象sessionFactory.evict(“mypa

16、ck.Category”);/清除第二级缓存中 Category 类的所有对象的 items 集合7.小结比较 Hibernate 的第一级缓存和第二级缓存比较:区别之处 第一级缓存 第二级缓存存放数据的形式 相互关联的持久化对象 对象的散装数据缓存的范围 事务范围,每个事务都拥有单独的第一级缓存进程范围或群级范围,缓存被同一个进程或群级范围内的所有事务共享并发访问策略 由于每个事务都拥有单独的第一级缓存,不会出现并发问题,因此无需提供并发访问策略由于多个事务会同时访问第二级缓存中相同数据,因此必须提供适当的并发访问策略,来保证特定的事务隔离级别数据过期策略 没有提供数据过期测控。处于第一级缓存中的对象永远不会过期,除非应用程序显式清空缓存或者清除特定的对象。必须提供数据过期策略,如基于内存的缓存中的对象的最大数目,允许对象处于缓存中最长时间,以及允许对象处于缓存中的最长空闲时间。物理介质 内存 内存和硬盘。对象的散装数据首先存放在基于内存的缓存中,当内存中

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号