hibernate的二级缓存

本文详细解析了一级缓存与二级缓存的区别,并深入探讨了查询缓存的工作原理及其配置方法。通过具体实例说明如何在代码中启用查询缓存,以提升查询性能。

重点:一级缓存和二级缓存的本质区别是,二级缓存关闭事务后还存在



一个是对对象的缓存,配置有2中方法:

①注解方式:在实体上配置@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 并指定缓存并发策略

②配置文件方式:<class-cache class="com.sy.vo.User" usage="read-write" />


一个是查询缓存(默认不开启):

查询缓存:

查询缓存是对普通属性结果集的缓存,对实体对象的结果集只缓存id,对于经常使用的查询语句,如果启用了查询缓存,当第一次执行查询语句时,Hibernate会把查询结果存放在二级缓存中,以后再次执行该查询语句时,只需从缓存中获得查询结果,从而提高查询性能,查询缓存中以键值对的方式存储的,key键为查询的条件语句(具体的key规则应该是:类名+方法名+参数列表),value为查询之后等到的结果集的ID列表

查询缓存的一般过程如下:

①:Query Cache保存了之前查询执行过的SelectSQL,以及结果集等信息组成一个Query Key

②:当再次遇到查询请求的时候,就会根据QueryKey从QueryCache中找,找到就返回,但当数据表发生数据变动的话,hbiernate就会自动清除QueryCache中对应的Query Key

我们从查询缓存的策略中可以看出,Query Cache只有在特定的条件下才会发挥作用,而且要求相当严格:

①:完全相同的SelectSQL重复执行

②:重复执行期间,QueryKey对应的数据表不能有数据变动

开启查询缓存,除了在persistence.xml中有以上配置外,还需要在底层代码手动开启查询缓存

例子
Query query = session.createQuery(hql);  
  query.setCacheable(true);//启用查询缓存
  query.setCacheRegion(“queryCacheRegion”);//设置查询缓存区域(数据过期策略)
  query.list();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿甘带你学java

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值