[原创]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 ...
最新文章
- 手把手教你React(一)JSX与虚拟DOM
- 一线技术管理者究竟在管什么事?
- 资讯|WebRTC M94 更新
- 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation
- android style 中一些颜色的定义
- android显示过程,Android 桌面加载图标过程分析
- windows7中安装jdk1.8
- 16.卷1(套接字联网API)---非阻塞式IO
- go程序员面试算法宝典 pdf_Go程序员面试算法宝典
- javascript解决猴子偷桃问题
- 下楼放风,树上掉下一只斑鸠小鸟
- 解决视频资源音乐资源在Android模拟器中不能播放的问题
- Kubernetes 中的对象是如何删除的:Finalizers 字段介绍
- 车牌对应城市行政区编号
- 父组件给孙子组件传值
- “借给别人5000块,我就能一口口吃掉他一套房,打官司也告不倒我!”
- 不少人都想了解网络安全培训内容有哪些?这篇文章会很详细的告诉你
- 【RenPy】关于ADV模式下say语句输出在NVL模式中文本框的问题
- PX4 磁罗盘干扰分析
- RD Client 用户账户无效解决办法
热门文章
- MYSQL中什么是规范化_如何规范化SQL数据库
- python安装django模块_python中安装django模块的方法
- android管理员和普通用户登录,asp登录页如何区别管理员和普通用户,登录后跳转到不同页面?...
- Gym - 100543L
- BZOJ 1086 [SCOI2005]王室联邦(树分块)
- Object Tracking using OpenCV (C++/Python)(使用OpenCV进行目标跟踪)
- Codeforces Round #496 (Div. 3 ) E1. Median on Segments (Permutations Edition)(中位数计数)
- kafka 常用命令汇总
- css定位:相对定位
- JS调用后台方法大全