您的位置:首页 > 其它

hibernate的二级缓存及hibernate 的查询缓存

2014-03-08 14:46 239 查看
1)二级缓存(参考TestCache.test2())

    默认关闭。属于SessionFactory级别缓存,可以被多个不Session对象访问。启用二级缓存后查找机制:

session查对象--->一级缓存查找(on)--->二级缓存查找(off)--->数据库查找.

   a)二级缓存适用环境

       该对象被多个不同请求频繁访问。

       该对象数据状态基本不发生改变。

   例如:当当网中查看产品详细页面功能。

   b)二级缓存使用方法

      二级缓存实现机制非常复杂,需要考虑缓存对象更新、对象命中率等问题,因此Hibernate采用了第三方提供的二级缓存组件。

     ehcache.jar二级缓存组件的使用方法:

     ----引入ehcache.jar组件开发包

     ----在src下添加ehcache.xml配置文件,用于设置二级缓存组件管理参数。

       <defaultCache   

        maxElementsInMemory="1000" //指定内存缓存对象的最大数量

        eternal="false" //指定缓存的对象是否长期有效

        timeToIdleSeconds="120"//指定对象空闲时间

        timeToLiveSeconds="300"//指定对象存活时间

        overflowToDisk="true"//指定超出缓存数量后,是否采用磁盘存储

        />

 

     ----在hibernate.cfg.xml配置中指定开启二级缓存,并指定采用哪个二级缓存组件
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">
true
</property>
<!-- 指定二级缓存组件 -->
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</property>

     ----哪些类型对象需要使用二级缓存,需要在hbm.xml中设置启用

             <class name="tarena.entity.Order" table="d_order">
<cache usage="read-only" region="sampleCache1"/>

                 <id/>...

             </class>

        c)二级缓存的管理方法

             sessionFactory.evict(类型或对象);//移除某一类型或某个对象

             sessionFactory.evictCollection();//移除集合

2)查询缓存(参考TestCache.test3())

        前面一级和二级缓存都只能缓存单个对象。如果查询的是字符串、数组或集合数据,需要使用查询缓存才可以缓存下来。

      a)查询缓存适用的环境

         同一个SQL频繁调用.

         查询结果集数据很少改变

         结果集数据量不要太大

       例如当当网主界面左侧类别菜单功能比较适合。

      b)查询缓存的使用方法

         ---开启二级缓存(参考前面步骤)

         ---在hibernate.cfg.xml中启用查询缓存配置
<!-- 指定开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">
true
</property>

         ---在query.list()调用之前设置启用查询缓存机制

              query.setCacheable(true);//启用查询缓存机制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息