【hibernate框架】缓存机制之查询缓存

查询缓存是面对重复缓存的,是依赖于二级缓存的,所以一定要打开二级缓存。

1.load默认使用二级缓存,iterate默认使用二级缓存
2.list默认往二级缓存中加数据,但是查询的时候不使用
3.如果要query用二级缓存,需打开查询缓存
i.<property name="cache.use_query_cache">ture</property>
ii.调用Query的setCacheable(true)方法指明使用二级缓存。

证明查询缓存已经起作用了:
@Test
	public void testListAndIterate2(){
		Session session = sf.openSession();
		session.beginTransaction();
	Query q=session.createQuery("from Topic").setCacheable(true);
		List<Topic> topics=(List<Topic>)q.list();
		for(Topic t:topics){
			System.out.println(t.getId()+"-"+t.getTitle());
		}
		List<Topic> topics2=(List<Topic>)q.list();
		for(Topic t:topics2){
			System.out.println(t.getId()+"-"+t.getTitle());
		}
		session.getTransaction().commit();
		session.close();
	}

发现只输出了一条查询语句,说明加第二次载了缓存:
Hibernate: 
    select
        category0_.id as id0_0_,
        category0_.name as name0_0_ 
    from
        Category category0_ 
    where
        category0_.id=?
c0

c0


PS:说一下主流的缓存算法

缓存算法就是指定内存里面哪个对象在适当的时候该拿走

a.LRU、LFU、FIFO
1.Least Recently Used
翻译是"最近很少使用",也就是最近很少使用的会被清除,每个在缓存中的对象都有存在的时间标志,哪一个时间长,就会被拿走。
2.Least Frequently Used(命中率高低)
最近不常被使用,最少被使用。缓存中有两个对象,一个被命中1回,一个被命中100回,那么新来一个对象的时候,就会清除那个命中1回的那个。
3.First In First Out
就是一个队列,后面进一个,前面走一个。


在ehcache的配置文件中可以配置这个属性来设置缓存算法:
b.memoryStoreEvictionPolicy="LRU"(ehcache)

转载请注明出处:http://blog.csdn.net/acmman/article/details/44132287

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

光仔December

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值