- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java框架篇一hibernate之缓存机制
一、why (为什么要用Hibernate缓存?)
Hibernate是一个持久层框架,经常访问物理数据库。
为了降低应用程序对物理数据源访问的频次,从而提 高应用程序的运行性能。
缓存内的数据是对物理数据源中的数据的复制,应用 程序在运行时从缓存读写数据,在特定的时刻或事件会同 步缓存和物理数据源的数据。
what ( Hibernate缓存原理是怎样的?)H
ibernate缓存包括两大类:Hibern ate 一级缓存和Hib ernate二级缓存。
Hiberna te 一级缓存又称为“S ession的缓存”。 Session内置不能被卸载,Sessi on的缓存是事务范围 的缓存(Session对象的生命周期通常对应一个数据库事务 或者一个应用事务)。
一级缓存中,持久化类的每个实例都具有唯一的0ID。
Hibernat e 二级缓存又称为 “Se ssionFactor y 的缓
存”
由于S essionFacto ry对象的生命周期和应用程序的 整个过程对应,因此Hibernate二级缓存是进程范围或者 集群范围的缓存,有可能出现并发问题,因此需要采用适 当的并发访问策略,该策略为被缓存的数据提供了事务隔 离级别。
第二级缓存是可选的,是一个可配置的插件,默认下 SessionFa ctory不会启用这个插件。
Hibern ate 提供了 org. h ibernate. ca che. CachePr ovider接口,它充当缓存插件与Hiber nate之间的适配 器。
什么样的数据适合存放到第二级缓存中?
1)很少被修改的数据
2)不是很重要的数据,允许出现偶尔并发的数据
3) 不会被并发访问的数据
4) 常量数据
不适合存放到第二级缓存的数据?
1)经常被修改的数据
2)绝对不允许出现并发访问的数据,如财务数据,绝 对不允许出现并发
3)与其他应用共享的数据。
Session的延迟加载实现要解决两个问题:正常关闭 连接和确保请求中访问的是同一个ses s i on。
H ibernateses sion 就是 java. sql. Connect ion 的一 层高级封装,一个session对应了一个Connecti on。
http请求结束后正确的关闭ses sion (过滤器实现了 session的正常关闭);延迟加载必须保证是同一个 session (session 绑定在ThreadLocal )。
Hiber nate查找对象如何应用缓存?
当Hibe mate根据ID访问数据对象的时候,首先从 Session 一级缓存中查;
查不到,如果配置了二级缓存,那么从二级缓存中查 如果都查不到,再查询数据库,把结果按照ID放入到 缓存删除、更新、增加数据的时候,同时更新缓存。
一级缓存与二级缓存的对比
一级缓存 二级缓存
存放数据的形式
相互关联的持久化对象
对象的散装数据
缓存的范围
事务范围,每个事务都拥有单独的一级缓存
进程范围或集群范围,缓存被同一个进程或集群范围
内所有事务共享
并发访问策略
由于每个事务都拥有单独的一级缓存不会出现并发问 题,因此无须提供并发访问策略
由于多个事务会同时访问二级缓存中的相同数据,因 此必须提供适当的并发访问策略,来保证特定的事务隔离 级别
数据过期策略
处于一级缓存中的对象永远不会过期,除非应用程序 显75清空或者清空特定对象
必须提供数据过期策略,如基于内存的缓存中对象的 最大数目,允许对象处于缓存中的最长时间,以及允许对 象处于缓存中的最长空闲时间
物理介质 内存
内存和硬盘,对象的散装数据首先存放到基于内存的 缓存中,当内存中对象的数目达到数据过期策略的ma xElementsIn Memory值,就会把其余的对象写入基于硬盘 的缓存中 缓存软件实现
在Hibernate的Session的实现中包含
由第三方提供,Hibernate仅提供了缓存适配器,用于 把特定的缓存插件集成到Hibernate中 启用缓存的方式
只要通过Session接口来执行保存,更新,删除,加 载,查询,Hiber nate就会启用一级缓存,对于批量操作 如不希望启用一级缓存,直接通过JDBCAPI来执行
用户可以再单个类或类的单个集合的粒度上配置第二 级缓存,如果类的实例被经常读,但很少被修改,就可以 考虑使用二级缓存,只有为某个类或集合配置了二级缓 存,Hibernate在运行时才会把它的实例加入到二级缓存中 用户管理缓存的方式
一级缓存的物理介质为内存,由于内存的容量有限, 必须通过恰当的检索策略和检索方式来限制加载对象的 目,Session的ev it ()方法可以显示的清空缓存中特定 对象,但不推荐
二级缓存的物理介
文档评论(0)