码迷,mamicode.com
首页 > 系统相关 > 详细

mybatis0210 mybatis和ehcache缓存框架整合

时间:2016-02-20 18:59:05      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

1.1mybatis和ehcache缓存框架整合
一般不用mybatis来管理缓存而是用其他缓存框架在管理缓存,因为其他缓存框架管理缓存会更加高效,因为别人专业做缓存的而mybatis专业做sql语句的,mybatis二级缓存通过ehcache维护缓存数据。
1.1.1分布缓存
将缓存数据数据进行分布式管理。用户发起请求,首先会根据负载选择不同的服务器,如果用户在服务器1和服务器2都登录过,那么把用户的session分别放在服务器1和服务器2是不行的,所以就把用户的信息放在远程服务器集群中统一管理。如果用mybatis的缓存,那么mybatis的缓存将会是分别在服务器1和服务器2,不能实现缓存的统一管理。

技术分享

1.1.1mybatis和ehcache思路
通过mybatis和ehcache框架进行整合,就可以把缓存数据的管理托管给ehcache。
在mybatis中提供了一个cache接口,只要实现cache接口就可以把缓存数据灵活的管理起来。(源码如下)

技术分享

mybatis中默认实现:(源码如下)

技术分享

1.1.1下载和ehcache整合的jar包

技术分享

Ehcache要扩展mybatis的缓存管理就要实现cache接口:(源码如下)

技术分享

1.1.1配置ehcache.xml

技术分享

1.1.1整合测试
(整合:导入jar包,写ehcache.xml)在mapper.xml添加ehcache配置:
<!-- 开启二级缓存 -->
     <!-- 单位:毫秒 -->
     <cache type="org.mybatis.caches.ehcache.EhcacheCache"> <!-- 二级缓存的类型是ehcache的实现类,不写类型默认就是mybatis的缓存, -->
         <property name="timeToIdleSeconds" value="12000"/>
        <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.2二级缓存的应用场景
对查询频率高,变化频率低的数据建议使用二级缓存。
    对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。
    实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。
1.3mybatis局限性
    mybatis二级缓存对细粒度的数据级别的缓存实现不好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为mybaits的二级缓存区域以mapper为单位划分,当一个商品信息变化会将所有商品信息的缓存数据全部清空。解决此类问题需要在业务层根据需求对数据有针对性缓存。

 

mybatis0210 mybatis和ehcache缓存框架整合

标签:

原文地址:http://www.cnblogs.com/yaowen/p/5203642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!