`

hibernate的缓存详解

阅读更多

hibernate的缓存详解:

1  缓存的概念,以及用途

1) 缓存:(hibernate单独用来保存数据,开辟一块内存)

    缓存就是数据库中的数据在内存中的临时的容器,包含

    了数据库表中的数据,位于数据库和访问层之间

2)缓存优点: hibernate做查询的时候,首先去缓存中

    查询要找的数据,有直接使用,没有再发sql语句去数据库

    中真实查询

    把用户经常访问的数据,放入缓存当中,这样每次

    就不需要去数据库中访问这些常用信息,可以提高系统的

    性能。

 3)缓存的分类:

     a) 一级缓存

     b) 二级缓存

     c) 查询缓存

 

 

2  一级缓存

    1)内部结构:一级缓存的内部结构就是一个map<id,object>

    map的key就是id,map的value就是实体对象,该结构

    导致一级缓存不能缓存属性

    2)一级缓存的生命周期:

    一级缓存的生命周期与session有关,session创建并

    维护一级缓存,session关闭,一级缓存销毁

    3)hibernate中API使用缓存:

    a) 可以读写一级缓存的: get  , load,Iterate

    b) 可以写入一级缓存的: save ,list

    4)hibernate一级缓存无法禁用:

        5)一级缓存的管理:session管理一级缓存(把一级缓存

        数据清空clear)

 

3  二级缓存

    1)二级缓存也叫进程级缓存或SessionFactory级缓存,

    二级缓存可以让所有的session所共享

    2)二级缓存的生命周期跟SessionFactory一致,

    SessionFactory管理二级缓存

    3)二级缓存的结构是Hashtable,只能保持实体对象,

    不能保存属性,开发当中需要使用第3方提供的缓存组件

    4)ehcache.xml

    //在该二级缓存中,最多可以缓存对象的数量

     maxElementsInMemory="1000" 

    //缓存在二级缓存中的对象是否永远都有效,一般配置为false

            eternal="true"

          //"钝化":两次访问该二级缓存中对象的,间隔时间

            timeToIdleSeconds="120"

          //二级缓存中的对象从创建到消亡的时间  

            timeToLiveSeconds="120"

           //如果超过缓存的访问,可以写入到硬盘上的

           overflowToDisk="true"

        5)如何使用二级缓存

               a)导入第3方ehcache-1.2.3.jar

               b)导入ehcache.xml 配置文件,放入src目录下

               c)修改hibernate.cfg.xml

               (一)指明二级缓存的提供商

                   <!-- 指明二级缓存的提供商 -->

                    <property name="cache.provider_class">

                    org.hibernate.cache.EhCacheProvider

                    </property>

                (二)开启二级缓存

                <!-- 是否开启二级缓存,true开启二级缓存,false关闭二级缓存 -->

                <property name="cache.use_second_level_cache">true</property>

        d)指明那个对象放入二级缓存中

        <!-- 指定把那个对象放入二级缓存当中 -->

        <class-cache class="com.tarena.po.Student" usage="read-only"/>

    6) 使用二级缓存

    能够读写二级缓存: get  load  iterate

    能够写入而不能读取二级缓存: list

    7) 二级缓存的管理

        使用SessionFactory来管理我们的二级缓存

        首先修改HibernateUtil,添加获得SessionFactory的方法

        SessionFactory factory = HibernateUtil2.getSessionFactory();

        //factory.evict(Student.class, 1):去掉二级缓存中

        //id为1的student对象

        //factory.evict(Student.class,1);

        //factory.evict(Student.class):去掉二级缓存中所有的

        //student对象

 

4  查询缓存

    1)查询用来保存属性的,对实体对象的结果集只保存id

    2)查询缓存的生命周期,只有当前的表发生改变,查询

    缓存的生命周期结束

    3)如何使用查询缓存:

        a)修改hibernate.cfg.xml文件,开启查询缓存

        <!-- 是否开启查询缓存,true开启查询缓存,false关闭查询缓存 -->

        <property name="cache.use_query_cache">true</property>

        b)在Query对象中必须手动开启查询缓存

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics