Hibernate——二级缓存

      二级缓存介绍:二级缓存也称为进程级的缓存或SessionFactory级的缓存,可以被所有的session共享。二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。

 

        二级缓存的配置和使用

  1.   配置ehcache.xml文件

       在此文件中,可以设置缓存中最多可容纳的对象数量,设置超时时间、设置对象的存活时间、当二级缓存溢出时,对象保存的位置等等。可以根据具体的对象进行具体的设置。

        <!-- 缺省配置,所有的类都默认遵循的配置 -->
    <defaultCache
        maxElementsInMemory="10000" <!-- 缓存中的对象数量 -->
        eternal="false"             <!-- 设置该二级缓存的对象是否永久存活,一般设置成false,防止数据库变动时出现数据不同步的错误,另外,为新增加近缓存的对象节省空间。  -->
        timeToIdleSeconds="120"     <!-- 在一定时间内如果没有被调用,则对象将自动在缓存当中被清除。 -->
        timeToLiveSeconds="120"     <!-- 对象在缓存中的最大存活时间,为了与数据库中的数据保持同步。 -->
        overflowToDisk="true"       <!-- 超出maxElementsInMemory设置的1000个对象时,是否保存到磁盘上。磁盘上的路径在diskStore中设置。 -->
        />
      <diskStore path="java.io.tmpdir"/>
  1.  在hibernate.cfg.xml文件中加入缓存产品提供商

<propertyname="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

  1.  启用二级缓存,这也是它的默认配置

<propertyname="hibernate.cache.use_second_level_cache">true</property>

  1.  指定哪些实体类使用二级缓存

         可以在映射文件中采用<cache>标签指定或在hibernate.cfg.xml文件中用<class-cache>统一指定。在hibernate.cfg.xml中配置的优势是,可以很快速的看到设置了那些对象支持二级缓存。 

    <!-- 在hibernate.cfg.xml文件中配置 -->
    <class-cache class="com.ls.Student" usage="read-only"/>
--------------------------------------------
    <!-- 映射文件中的配置 -->
    <cache usage="read-only"/>

         usage为缓存使用策略,通常采用read-only和read-write。

read-only用于适用于不变的数据,使用read-onyl可以提高效率,因为只允许读,避免了修改带来的维护的复杂性。但是,同时也存在缺点,如果更新了数据库,在缓存超时之前,缓存里数据仍然是不变的,这样就会出现脏数据。

read-write需要通过锁机制来保证数据的准确性。

            二级缓存和一级缓存一样,主要是缓存实体对象的,对普通属性不进行缓存。什么时候适合使用二级缓存?: 一些确定需要经常访问的对象、 数据量并不大的情况、改动非常少的对象。

       一级缓存和二级缓存的交互

 一级缓存和二级缓存的交互,通过session.setCacheMode(CacheMode.get/put/normal/ingore)方法来控制。

CacheMode.get:一级缓存可以读取二级缓存中的数据

CacheModel.put:一级缓存里的数据可以写入二级缓存中

CacheModel.normal:可以进行读写操作,此参数为默认

CacheModel.ignore:禁止一级缓存和二级缓存的交互

 大批量数据更新时,如果配置了二级缓存建议禁用一级缓存和二级缓存的交互,这样,通过禁止存入二级缓存,通过清理一级缓存,达到减少内存占用的目的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值