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

最新文章

  1. UVa 11729
  2. CF 435B Pasha Maximizes(贪心)
  3. android 进程/线程管理(四)续----消息机制的思考(自定义消息机制)
  4. (C/C++) 算法,编程题
  5. iOS 自定义导航栏 和状态栏
  6. js中常用数组方法concat join push pop slice splice shift
  7. 24种设计模式--建造者模式【Builder Pattern】
  8. python 正则表达式(一)
  9. 【Cocos2d-X开发学习笔记】第26期:游戏背景之滚动地图背景(CCParallaxNode)的使用
  10. 函数(jquery)
  11. JSP 9 大内置对象详解
  12. 用python将SQL格式文件改成自己想要的格式
  13. SSH(Spring4+Struts2+Hibernate4)框架整合
  14. VMware Workstation 14.1.1 精简特别版
  15. Stringbuffer与substring
  16. Qt通过ODBC连接SQL Server2008实践总结
  17. leetcode500
  18. jQuery上传插件uploadify 3.2.1
  19. ubuntu 装 mysql
  20. Visual Studio2017 设置了vcpkg之后,编译其他程序出问题

热门文章

  1. Android中获取应用程序(包)的信息----PackageManager
  2. 【LeetCode 99】Recover Binary Search Tree
  3. 3D 矩阵旋转
  4. login:用户登陆的意思
  5. 双网卡bond
  6. C/C++:类模板
  7. spoj 839 Optimal Marks(二进制位,最小割)
  8. Classes and Objects :类和对象(2)
  9. RabbitMQ C# 例子 -摘自网络
  10. mysql的登录密码带特殊符号登录不进去的问题