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缓存机制浅谈的主要内容,如果未能解决你的问题,请参考以下文章

hibernate缓存机制详细分析 复制代码

hibernate笔记--缓存机制之 一级缓存(session缓存)

浅谈浏览器的缓存机制

浅谈浏览器的缓存机制

Hibernate 缓存机制

Hibernate 缓存机制(转)