Hibernate缓存.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hibernate缓存

Hibernate缓存 Hibernate缓存:缓存是在内存中的一块高速区域。 Hibernate缓存的作用:可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 在Hibernate中,缓存分为2种方式: 1.一级缓存: Hibernate默认支持的,是属于Session级别的,也就是说跟它跟Session的生命周期息息相关。 2.二级缓存:Hibernate二级缓存是一个可插拔的的缓存插件,它是由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个过程对应。 Hibernate的二级缓存策略的一般过程如下: 1.配置好二级缓存。 2.如:执行get User.class,1 ;然后关闭session,这个时候,同样在执行一次get User.class,1 ;这样的语句,它在执行第一次的时候,首先,先将第一次查询到的结果放到一级缓存中,并复制一份放到二级缓存中,然后把id为1作为key放入一个内存中的id列表里面,当第二次执行同样的代码的时候,会先在一级缓存里找,这个时候因为Session已经关闭了,那么就会到二级缓存里面找,先找在id列表里面找id为1的的id列表,很显然会找到,然后会根据这个id在相应的类缓存中找到对应的对象。 在二级缓存中还有一个查询缓存,它只对list起作用,对iterator不起作用。 Hibernate查询缓存 生命周期不固定 ,当数据库 表发生改变的使用Hibernate查询缓存马上消失。   Hibernate的查询缓存策略的过程如下:  1.启动查询缓存。 ??2.然后执行如:session.createQuery from User where id 1 .setCacheable true .list ;setCacheable true 激活查询缓存,然后在Session关闭以后,在执行一条session.createQuery from User where id 1 .setCacheable true .list ;这样的语句,第一次执行的时候,会先将第一次查询到的结果放入到一级缓存中,并将该实体的id为key放入到二级缓存中,然后以SQL为key放入的二级缓存的查询缓存中,当第二次执行相同的语句的时候,系统会先在一级缓存中里面找,如果找不到,在到二级缓存中来找,系统会先根据id为因为是HQL语句来查询的所以没有id项,然后就会根据SQL来到二级缓存中的查询缓存里面来找,这次找到了,就返回该实体。 好了,说了那么多,接下来我们来实战一下: 首先是先在Hibernate-cfg.xml里面来配置二级缓存,配置如下: !--?启动二级缓存?-- !--?打开二级缓存?-- property?name cache.use_second_level_cache true !--?设置Hibernate的缓存接口类,也就是选用缓存的组件?-- property?name cache.provider_class org.hibernate.cache.EhCacheProvider !--?启动查询缓存?-- property?name cache.use_query_cache true mapping?resource com/lovo/po/User.hbm.xml/ !--?要缓存的类?-- class-cache?class com.lovo.po.User?usage read-write/ 这里,我们主要来说下usage的配置项有: ?只读缓存(read-only) 如果应用程序需要读取一个持久化类的实例,但是并不打算修改它们,可以使用read-only缓存。这是最简单,也是实用性最好的策略。 对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。 ?读/写缓存(read-write) 如果应用程序需要更新数据,可能read-write缓存比较合适。如果需要序列化事务隔离级别,那么就不能使用这种缓存策略。 对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。 ?不严格的读/写缓存(nonstrict-read-write) 如果程序偶尔需要更新数据(也就是说,出现两个事务同时更新同一个条目的现象很不常见),也不需要十分严格的事务隔离,可能适用nonstrict-read-write缓存。 对于极少被修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。 事务缓存(transactional) transactional缓存策略提供了对全事务的缓存,仅仅在受管理环境中使用。它提供了Repeatable Read事务隔离级别。对于经常被读

文档评论(0)

didala + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档