码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate缓存机制浅谈

时间:2017-10-16 19:42:16      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:性能   nat   date   blog   session   int   bsp   div   数据存储   

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缓存机制浅谈

标签:性能   nat   date   blog   session   int   bsp   div   数据存储   

原文地址:http://www.cnblogs.com/hc20080925hq/p/7678122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!