Hibernate缓存机制浅谈
Posted 山河故人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate缓存机制浅谈相关的知识,希望对你有一定的参考价值。
Hibernate缓存
对于一个成熟的项目而言,缓存是必不可少的数据存储策略。
在实际项目开发过程中,Hibernate是一个持久层框架,频繁访问物理数据库是一个高消耗、高延迟的操作。对服务器造成的压力比较大。所 以,需要缓存,来减轻数据库的压力,提高网站的访问速度和性能。比如,对于电商类的项目中商品、热销、推荐 等信息可以放在缓存中,提高访问速度、减轻服务器的压力。
1Hibernate的一级缓存(Session级缓存)
一级缓存是Session级别的缓存,它属于事务范围的缓存,该级缓存由hibernate管理,应用程序无需干预。
Hibernate的一级缓存由Session提供,只存在于Session的生命周期中,当应用程序调用Session接口的save(),update(),saveOrupDate(),get(),load()或者Query和Criteria实例的list(),iterate()等方法时,如果Session缓存中没有相应的对象,hibernate就会把对象加入到一级缓存中,当session关闭时,该Session所管理的一级缓存也会立即被清除;
1.get查询的测试
1>在同一个session里执行两次get查询,以出现的sql语句数量来判断是否有缓存效果。
如果sql语句出现两条,则没有出现缓存。如果只有一条sql语句则,Hibernate的一级缓存启用了。
public void testQuery(){ Configuration configuration = new Configuration(); Configuration configure = configuration.configure(); SessionFactory sessionFactory = configure.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); HotelBean hotel1 = session.get(HotelBean.class, 3); HotelBean hotel2 = session.get(HotelBean.class, 3); transaction.commit(); session.close(); }
在控制台查看到显示的sql结果如下:
Hibernate: select hotelbean0_.hotel_id as hotel_id1_0_0_, hotelbean0_.hotel_name as hotel_na2_0_0_, hotelbean0_.hotel_address as hotel_ad3_0_0_ from hotel hotelbean0_ where hotelbean0_.hotel_id=? Process finished with exit code 0
两次查询,第一次执行了get方法查询了数据库,产生了一条sql语句,第二次执行get方法时,由于在一级缓存中找到了该对象,因此不会查询数据库,不再发出sql语句。
session级缓存:默认缓存。
增加、修改、查询的时候,都有缓存的数据。
2Hibernate的二级缓存(SessionFactory级缓存)
二级缓存是SessionFactory级别的缓存,该级缓存可以进行配置和更改,并且可以动态加载和卸载,hibernate还为查询结果提供了一个查询缓存,它依赖于二级缓存;
以上是关于Hibernate缓存机制浅谈的主要内容,如果未能解决你的问题,请参考以下文章