[原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用
mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存。
1.开启mybatis的二级缓存
在核心配置文件SqlMapConfig.xml中加入
1 <settings> 2 <!-- 开启二级缓存 --> 3 <setting name="cacheEnabled" value="true"/> 4 </settings>
2.导入ehcache相关jar包
ehcache-core-2.6.5.jar
mybatis-ehcache-1.0.2.jar
3.在classpath下加入ehcache.xml文件
1 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> 3 <diskStore path="F:\develop\ehcache" /> 4 <defaultCache 5 maxElementsInMemory="1000" 6 maxElementsOnDisk="10000000" 7 eternal="false" 8 overflowToDisk="false" 9 timeToIdleSeconds="120" 10 timeToLiveSeconds="120" 11 diskExpiryThreadIntervalSeconds="120" 12 memoryStoreEvictionPolicy="LRU"> 13 </defaultCache> 14 </ehcache>
属性说明:
diskStore:指定数据在磁盘中的存储位置。
defaultCache:当借助CacheManager.add("demoCache")创建Cache时,EhCache便会采用<defalutCache/>指定的的管理策略
以下属性是必须的:
maxElementsInMemory - 在内存中缓存的element的最大数目
maxElementsOnDisk - 在磁盘上缓存的element的最大数目,若是0表示无穷大
eternal - 设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断
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(先进先出)
4.在UserMapper.xml中开启二缓存,UserMapper.xml下的sql执行完成会存储到它的缓存区域(HashMap)
根据需求调整缓存参数:
1 <cache type="org.mybatis.caches.ehcache.EhcacheCache" > 2 <property name="timeToIdleSeconds" value="3600"/> 3 <property name="timeToLiveSeconds" value="3600"/> 4 <!-- 同ehcache参数maxElementsInMemory --> 5 <property name="maxEntriesLocalHeap" value="1000"/> 6 <!-- 同ehcache参数maxElementsOnDisk --> 7 <property name="maxEntriesLocalDisk" value="10000000"/> 8 <property name="memoryStoreEvictionPolicy" value="LRU"/> 9 </cache>
log4j打印如下日志,说明缓存开启成功:
DEBUG [main] - Cache Hit Ratio [cn.itcast.jdbc.mapper.UserMapper]: 0.0
应用场景:
对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。
实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。
局限性:
mybatis二级缓存对细粒度的数据级别的缓存实现不好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为mybaits的二级缓存区域以mapper为单位划分,当一个商品信息变化会将所有商品信息的缓存数据全部清空。解决此类问题需要在业务层根据需求对数据有针对性缓存。
缓存都是实现了Cache这个接口.....
public class EhCache implements Cache{}
作者:little飞 出处:http://www.cnblogs.com/little-fly/ 欢迎转载 也请保留这段声明 谢谢!
转载于:https://www.cnblogs.com/little-fly/p/6251439.html
[原创]mybatis中整合ehcache缓存框架的使用相关推荐
- Spring MVC学习总结(7)——Spring MVC整合Ehcache缓存框架
Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力.接下来我们看怎么把缓存使用起来. SpringMVC集成Ehcache所需的j ...
- Spring MVC整合Ehcache缓存框架
https://blog.csdn.net/u012562943/article/details/52289433 转载于:https://www.cnblogs.com/pjlhf/p/881874 ...
- 【MyBatis学习13】MyBatis中的二级缓存
1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...
- MyBatis中的二级缓存
MyBatis中的二级缓存 1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二 ...
- 【MyBatis学习8】MyBatis中的二级缓存
1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...
- SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)
1.说明 Spring定义了CacheManager和Cache接口, 用来统一不同的缓存技术, 例如JCache,EhCache,Hazelcast,Guava,Redis等. 本文通过Spring ...
- Mybatis 中的一级缓存与二级缓存
一,Mybatis中为什么要有缓存 缓存的意义是将用户经常查询的数据放入缓存(内存)中去,用户去查询数据的时候就不需要从磁盘(关系型数据库)中查询,直接从缓存中查询,从而提高了查询效率,解决了高并 ...
- 在SpringBoot中整合使用Netty框架提供WebSocket服务
在SpringBoot中整合使用Netty框架 Netty是一个非常优秀的Socket框架.如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择. Netty ...
- 【SpringBoot】27、SpringBoot中整合Ehcache实现热点数据缓存
EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider.用惯了 Redis,很多人可能已经忘记了还有 EhCache ...
最新文章
- StringUtils.join的用法
- matlab散点光滑连线,科研画图:散点连接并平滑(基于Matlab和Python)
- JavaSE(五)——修饰符、内部类、匿名内部类
- [蓝桥杯2018初赛]星期一-日期计算
- jenkins安装 新建节点(5)
- HDU 3572 Task Schedule
- Event Organization Site - To be published on 4th August
- 0054-软件版本号问题
- linux 安装mysql 云盘_linux下 安装mysql教程
- iphone转android通讯录,苹果IPHONE通讯录电话簿转到安卓手机csv,vcf方法(ITUNES,OUTLOOK,EXCEL)...
- ubuntu虚拟机传文件到当前主机
- 灰色预测 Matlab
- 编写一个程序个人资料管理工具 考试题目 求大神帮忙 可以给一定报酬 万分感谢!
- “App开发者需要更新此App以在此iOS版本上正常工作 ” 解决方法
- php仿qq聊天界面,jquery仿微信聊天界面
- POI获取文本单元格的数字变成科学计数法的处理方法
- 怎么申请企业电子邮箱?TOM企业邮箱注册电子邮件流程详解
- python宿舍管理系統毕业设计源码231642
- 天正暖通天圆地方在哪_天圆地方说与属性开篇第一数理
- 小程序如何转App?
热门文章
- linux系统shell知识点,Linux 系统中shell知识点说明和常用的帮助命令简单介绍 | IT工程师的生活足迹...
- imagex使用方法_Microsoft OneDrive 的使用心得,真香
- Spring boot actuator端点启用和暴露
- 为什么MySQL数据库要用B+树存储索引
- 数据库日期时间显示在页面上格式错误的解决方案
- shape的简单用法
- mysql自增id获取失败
- php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path
- Android kotlin实现底部导航栏
- html不支持元素video,Html5中的Video元素使用方法