hibernate的二级缓存

来源:互联网 发布:汽车加油优惠软件 编辑:程序博客网 时间:2024/06/14 21:21

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



一个是对对象的缓存,配置有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();


原创粉丝点击