Hibernate缓存——查询缓存

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 05:53   52   0

Hibernate缓存——查询缓存

默认情况下关闭设置的缓存对HQL和QBC查询时无效,需要打开查询缓存。

查询缓存依赖于二级缓存。



1.设置

<propertyname="hibernate.cache.use_query_cache">

true

</property>



2.在打开了查询缓存之后,需要注意,调用query.list()操作之前,必须显式调用query.setCachable(true)来标识某个查询使用缓存。


public void testQuery() {

Queryquery = session.createQuery("from Emp");

query.setCacheable(true);

Listlist = query.list();

System.out.println(list);

Listlist2 = query.list();

System.out.println(list2);

}


时间戳缓存区域:


时间戳缓存区域存放了对于查询结果相关的表进行插入,删除或更新操作的时间戳。


Hibernate通过时间戳缓存区域来判断被缓存的查询结果是否过期,过程如下:


T1时刻执行查询操作,把查询结果放在QueryCache区域,记录该区域的时间戳为T1


T2时刻对查询结果相关的表进行更新操作,hibernate把T2时刻存放在UpdateTimestampCache区域


T3时刻执行查询前,比较T1,T2,如果T1>T2,直接从QueryCache区域获取查询结果,如果T2>T1,丢弃QueryCache数据,重新查询数据库,将数据放入QueryCache区域


Query query = session.createQuery("from Emp");

query.setCacheable(true);

Listlist = query.list();

System.out.println(list);

Empemp = (Emp)session.get(Emp.class, 1);

emp.setOrderName("rrr");

Listlist2 = query.list();

System.out.println(list2);

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP