重点:一级缓存和二级缓存的本质区别是,二级缓存关闭事务后还存在
一个是对对象的缓存,配置有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();
本文详细解析了一级缓存与二级缓存的区别,并深入探讨了查询缓存的工作原理及其配置方法。通过具体实例说明如何在代码中启用查询缓存,以提升查询性能。
609

被折叠的 条评论
为什么被折叠?



