hibernate的缓存机制

时间:2022-07-30 08:22:02

hibernate提供两种缓存:一级缓存和二级缓存

一、一级缓存:也就是Session缓存(又称作事务缓存):Hibernate内置的,不能卸除。

   在同一个Session里面,第一次调用get()方法, Hibernate先检索缓存中是否有该查找对象,发现没有,Hibernate发送select语句到数据库中取出相应的对象,然后将该对象放入缓存中,以便下次使用,第二次调用get()方法,Hibernate先检索缓存中是否有该查找对象,发现正好有该查找对象,就从缓存中取出来,不再去数据库中检索,没有再次发送select语句。

     session缓存范围:缓存只能被当前Session对象访问。缓存的生命周期依赖于Session的生命周期,当Session被关闭后,缓存也就结束生命周期。

 

     session缓存的三大作用:

 

         1、减少数据库的访问频率,提高访问性能。

 

         2、保证缓存中的对象与数据库同步,位于缓存中的对象称为持久化对象。

 

               3、当持久化对象之间存在关联时,Session 保证不出现对象图的死锁。

 

二、二级缓存:也就是SessionFactory缓存(又称作应用缓存):使用第三方插件,可插拔。

     当使用Hibernate从数据库中查询出数据,获取检索的数据后,Hibernate将检索出来的对象的id放入缓存中key 中,然后将具体的POJO放入value中,等待下一次再次向数据查询数据时,Hibernate根据你提供的OID先检索一级缓存,若有且配置了二级缓存,则检索二级缓存,如果还没有则才向数据库发送SQL语句,然后将查询出来的对象放入缓存中。