hibernate缓存机制

来源:互联网 发布:九鼎下落知乎 编辑:程序博客网 时间:2024/05/21 05:39


hibernate的缓存机制

当谈缓存时,相信大家都会毫不犹豫额联想到计算机CPU的缓存,而hibernate这个开源框架也为我们提供了他的缓存机制:一级缓存和二级缓存

Hibernate是一个持久层框架,经常访问物理数据库。为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。

1.一级缓存

                   1.1  Hibernate一级缓存又称为“Session的缓存”。Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。一级缓存中,持久化类的每个实例都具有唯一的OID。

                   1.2  一级缓存存在的验证:

Session session = HibernateUtil.getSessionFactory().openSession();        Transaction tx = null;        try        {            /*开启一个事务*/            tx = session.beginTransaction();            /*从数据库中获取id="1"的Customer对象*/            Customer customer1 = (Customer)session.get(Customer.class, "1");            System.out.println("customer.getUsername is"+customer1.getUsername());            /*事务提交*/            tx.commit();            System.out.println("**************************************");                        /*开启一个新事务*/            tx = session.beginTransaction();            /*从数据库中获取id="1"的Customer对象*/            Customer customer2 = (Customer)session.get(Customer.class, "1");            System.out.println("customer2.getUsername is"+customer2.getUsername());            /*事务提交*/            tx.commit();                        System.out.println("**************************************");                      }        catch (Exception e)        {            if(tx!=null)            {                tx.rollback();            }        }        finally        {            session.close();        }    }
     运行结果

    

仅仅执行了一次select语句,因此证明了一级缓存的存在


你还会发现当update方法执行时,如果没有参数发生变化:不会执行update语句,相反如果发生了变化,就会执行update语句,更新发生变化的字段,这又是为什么呢?

一切原因由快照:

快照是什么呢?

     快照:是对数据库数据的一个映射,数据与数据库是一致的(类似于网络爬虫,知识某时刻的数据库的快照)

         

这样极大减轻了服务器的负担,

如果回滚,一级缓存内容数据修改后没有回复修改的前。

2.二级缓存

           2.1   二级缓存:SessionFactory级别缓存,hibernate提供规范(接口),如果需要使用必须有实现类(第三方实现)。二级缓存默认不使用的,如果需要使用必须手动配置。

   2.2 二级缓存的结构

       

   2.3分类   

  •     类缓存
  •     集合缓存
  •     时间戳

   2.4  作用

    因为应用程序访问数据库,读写数据的代价非常高,而利用持久层的缓存可以减少应用程序与数据库之间的交互,即把访问过的数据保存到缓存中,应用程序再次访问已经访问过的数据,这些数据就可以从缓存中获取,而不必再从数据库中获取。同时如果数据库中的数据被修改或者删除,那么是、该数据所对应的缓存数据,也会被同步修改或删除,进而保持缓存数据的一致性

   未完待续.......


1 0