第7章 Hibernate的二级缓存和查询缓存.ppt_第1页
第7章 Hibernate的二级缓存和查询缓存.ppt_第2页
第7章 Hibernate的二级缓存和查询缓存.ppt_第3页
第7章 Hibernate的二级缓存和查询缓存.ppt_第4页
第7章 Hibernate的二级缓存和查询缓存.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HibernateORM最佳实践第7章Hibernate的二级缓存和查询缓存 2 回顾 QBC querybycriteria 面向对象查询方式利用HQL和criteria连接查询Hibernate的数据检索策略 3 目标 学会使用和管理Hibernate的二级缓存学会使用和管理Hibernate的查询缓存使用Hibernate的统计机制监视二级缓存的使用情况 4 Hibernate缓存使用流程 在一级缓存中查找 命中 Y 查询结果 结束 N 启用二级缓存 在二级缓存中查找 命中 保存结果到一级缓存 Y 数据库查询 N Y N 保存结果至二级缓存 避免频繁从数据库读取大量重复数据提供很好的性能 5 二级缓存 第一级缓存 与session绑定 session 缓存并发策略 查询缓存 CacheProvider OSCache EHCache JBossTreeCache 第二级缓存 与SessionFactory绑定 查询缓存依赖于二级缓存 二级缓存默认是关闭的 需要在配置文件中设置hibernate cache provider class 将不同对象放在指定缓存区域 二级缓存由第三方组件提供实现 二级缓存策略设置隔离级别在映射文件中 queryid 6 缓存并发策略 为了使用二级缓存 在POJO的映射文件中增加一个配置项来说明该POJO的存取策略 只允许对该对象在二级缓存中读取操作 在二级缓存中对该对象可以读写操作 利用时间戳并发控制 非严格读写策略 要求并发更新同一数据的几率很低 事务策略 提供可重复读事务隔离级别 用于分布式环境中 7 缓存提供者 第三方组件 分三步来配置启用Hibernate的二级缓存 在Hibernate配置文件hibernate cfg xml中设置缓存提供者实现类 设置缓存的配置文件 用以增强缓存功能 在POJO映射文件中设置缓存并发策略 注意 启用二级缓存后 当调用save update saveOrUpdate 写入一个对象时 或使用load get list iterator 获得一个对象时 这个对象都将被放在session缓存和二级缓存中 8 示例 类对象进行缓存 以EhCache举例 用第三方组件EhCacheProvider启动二级缓存 设置Hibernate的统计为true 9 代码 对类对象设置二级缓存策略 10 运行 当我们关闭二级缓存 结果会怎样 将Student hbm xml中去掉 11 当第二次读取对象前 清除二级缓存中的Student对象 12 运行 问题 默认缓存区域 指定与类名相同的缓存区域 13 示例 对集合进行缓存 以OsCache举例 Teacher hbm xml 对集合进行缓存 注意 对集合进行缓存其目的提高性能 所以除了在集合元素下启用缓存 对于集合元素对应的类文件也应该使用缓存 如果集合元素对应的类文件没使用缓存 发现对象不存在 Hibernate会从数据库中读取 失去意义 14 代码 Student hbm xml 将hibernate cfg xml增加二级缓存第三方组件提供者 增加oscache properties缓存配置 15 运行 从二级缓存取出 16 问题 将上述程序中 修改检索对象id 605 出现什么情况 由于在上一次运行的结果保留在二级缓存中 没有触发select操作 对象id 605不在缓存中 所以到数据库中查询 查询的结果保留在一级和二级缓存中 将上述缓存文件清除 修改学生映射表 不使用二级缓存 查询学生对象601 情况怎样 为什么还要触发select操作 二级缓存中已经有teacherID 101 17 学生对象不保存在二级缓存中 立即加载失去意义 缓存提高性能失去意义 18 查询缓存 在前面的例子中可以发现 如果我们使用list 函数载入对象时 它不会使用二级缓存 也就是说不会先尝试从二级缓存中查找对象 而是直接从数据库中使用select语句读取对象 如果使用iterate 函数时 Hibernate会先使用一条selectid的语句从数据库中把符合条件的id都取出来 然后再根据id一个一个载入对象 如果缓存有 从缓存取 没有从数据库载入 怎么办 希望先到二级缓存中查找 启用查询缓存 查询缓存是Map结构 以查询的HQL和查询参数作为缓存中的key 其value存放的是这个查询条件所返回所有对象id 根据所获得id再到类对象的二级缓存中去载入对象 使用查询缓存 必须先启动二级缓存 同时在类的映射文件中需要元素设置 19 使用查询缓存 分下列步骤进行 在hibernate cfg xml中配置二级缓存和查询缓存 第三方组件true 设置POJO映射文件中元素 在程序中调用query setCacheable true 和query setCacheRegion 缓存区域名 20 示例 设置查询缓存 并且依赖二级缓存 21 Queryid是相同的 如果该值改为 603 出现什么结果 设置查询缓存 22 运行 从查询缓存中获取 使用缺省缓存设置 从数据库中获取 23 使用查询缓存注意事项 必须保证查询结果集的大小在可空范围之内 否则内存就被消耗殆尽在对查询数据做过更改后 必须清楚查询缓存 否则查询到 脏数据 确保使用查询缓存的查询语句 查询条件很少改变 24 管理二级缓存 缓存模式清除缓存对象 SessionFactory提供 session setCacheMode CacheMode CacheMode NORMAL CacheMode GET CacheMode PUT CacheMode REFRESH evict ClasspersistenceClass evict ClasspersistenceClass Serializableid evictEntity StringentityName evictEntity StringentityName Serializableid evictCollection StringcollectionName evictCollection StringcollectionName Serializablei

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论