【hibernate框架】缓存机制之一级缓存

什么是缓存:我们在内存中开辟一块空间,把本来应该存储在硬盘上的东西,然后给它放在内存里,将来要读的时候从内存中读,这个部分就叫做缓存。

在hibernate有三种缓存,一级缓存,二级缓存和查询缓存。

一级缓存是session级别的缓存。
例子:
@Test
public void testHuanCun(){
	Session session = sf.openSession();
	session.beginTransaction();
	Category c=(Category)session.load(Category.class,1);
	System.out.println(c.getName());
	
	Category c2=(Category)session.load(Category.class,1);
	System.out.println(c2.getName());
	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
取了两次Category_1,但是只发出1条sql语句,第二次拿数据是从缓存中拿。

测试2:
@Test
	public void testHuanCun2(){
		Session session = sf.openSession();
		session.beginTransaction();
		Category c=(Category)session.load(Category.class,1);
		System.out.println(c.getName());
		session.getTransaction().commit();
		session.close();
		
		Session session2 = sf.openSession();
		session2.beginTransaction();
		Category c2=(Category)session2.load(Category.class,1);
		System.out.println(c2.getName());
		session2.getTransaction().commit();
		session2.close();
	}
测试结果:
Hibernate: 
    select
        category0_.id as id0_0_,
        category0_.name as name0_0_ 
    from
        Category category0_ 
    where
        category0_.id=?
c0
Hibernate: 
    select
        category0_.id as id0_0_,
        category0_.name as name0_0_ 
    from
        Category category0_ 
    where
        category0_.id=?
c0
发出两条sql语句去取数据。
证明一个session是不能去拿另外一个session的缓存的。

假如利用多线程取数据,每次数据都从不同的session中取,这样就导致每一次查询都会访问数据库。如何解决?

解决方案:每个session都有各自的缓存,那么我何不弄一个大的缓存,把所有的缓存信息都存在这个大的缓存里。到查询信息的时候,去大缓存中去查找,找不到了再去数据库查找。这个缓存我们称之为二级缓存。

二级缓存在下一个文档里:http://blog.csdn.net/acmman/article/details/44132207

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

光仔December

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

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

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

打赏作者

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

抵扣说明:

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

余额充值