myBatis整合ehcache(17)

前记:这是很早之前自学学习myBatis时的笔记,内容比较基础,适合新手,内容基本是来自网络,如有雷同,敬请谅解!

1.    myBatis整合ehcache

EhCache 是一个纯Java的进程内缓存框架,是一种广泛使用的开源Java分布式缓存,具有快速、精干等特点,是Hibernate中默认的CacheProvider。

ehcache是一个分布式缓存框架。

1.1分布缓存

我们系统为了提高系统并发,性能、一般对系统进行分布式部署(集群部署方式)

不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发。所以要使用分布式缓存对缓存数据进行集中管理。

mybatis无法实现分布式缓存,需要和其它分布式缓存框架进行整合。

1.2  myBatis整合ehcache原理

mybatis提供二级缓存Cache接口,如下:


它的默认实现类:


通过实现Cache接口可以实现mybatis缓存数据通过其它缓存数据库整合,mybatis的特长是sql操作,缓存数据的管理不是mybatis的特长,为了提高缓存的性能将mybatis和第三方的缓存数据库整合,比如ehcache、memcache、redis等。

1.3  依赖包


1.4  引入缓存配置文件

classpath下添加:ehcache.xml

内容如下:

<ehcachexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

    <diskStorepath="F:\develop\ehcache"/>

    <defaultCache

       maxElementsInMemory="1000"

      maxElementsOnDisk="10000000"

       eternal="false"

       overflowToDisk="false"

       timeToIdleSeconds="120"

       timeToLiveSeconds="120"

       diskExpiryThreadIntervalSeconds="120"

       memoryStoreEvictionPolicy="LRU">

    </defaultCache>

</ehcache>

 属性说明:

            diskStore:指定数据在磁盘中的存储位置。

           defaultCache:当借助CacheManager.add("demoCache")创建Cache时,EhCache便会采用<defalutCache/>指定的的管理策略

     以下属性是必须的:

           maxElementsInMemory -在内存中缓存的element的最大数目

           maxElementsOnDisk -在磁盘上缓存的element的最大数目,若是0表示无穷大

           eternal -设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSecondstimeToLiveSeconds判断

           overflowToDisk -设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上

     以下属性是可选的:

          timeToIdleSeconds -当缓存在EhCache中的数据前后两次访问的时间超过timeToIdleSeconds的属性取值时,这些数据便会删除,默认值是0,也就是可闲置时间无穷大

         timeToLiveSeconds -缓存element的有效生命期,默认是0.,也就是element存活时间无穷大

        diskSpoolBufferSizeMB 这个参数设置DiskStore(磁盘缓存)的缓存区大小.默认是30MB.每个Cache都应该有自己的一个缓冲区.

         diskPersistent -VM重启的时候是否启用磁盘保存EhCache中的数据,默认是false

        diskExpiryThreadIntervalSeconds -磁盘缓存的清理线程运行间隔,默认是120秒。每个120s,相应的线程会进行一次EhCache中数据的清理工作

        memoryStoreEvictionPolicy-当内存缓存达到最大,有新的element加入的时候,移除缓存中element的策略。默认是LRU(最近最少使用),可选的有LFU(最不常使用)和FIFO(先进先出)

1.5  开启ehcache缓存

EhcacheCache是ehcacheCache接口的实现:

 

修改mapper.xml文件,在cache中指定EhcacheCache

<cachetype="org.mybatis.caches.ehcache.EhcacheCache”/>

根据需求调整缓存参数:

<cachetype="org.mybatis.caches.ehcache.EhcacheCache">

        <property name="timeToIdleSeconds"value="3600"/>

        <property name="timeToLiveSeconds"value="3600"/>

        <!-- ehcache参数maxElementsInMemory-->

       <property name="maxEntriesLocalHeap"value="1000"/>

       <!-- ehcache参数maxElementsOnDisk -->

        <property name="maxEntriesLocalDisk"value="10000000"/>

        <property name="memoryStoreEvictionPolicy"value="LRU"/>

    </cache>

1.6  应用场景

         对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。

         实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。

1.7  局限性

mybatis二级缓存对细粒度的数据级别的缓存实现不好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为mybaits的二级缓存区域以mapper为单位划分,当一个商品信息变化会将所有商品信息的缓存数据全部清空。解决此类问题需要在业务层根据需求对数据有针对性缓存。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值