本博客源码下载:戳我一下
Mybatis学习笔记汇总:戳我一下
EhCache
是一个纯Java的进程内缓存框架,是一种广泛使用的开源Java分布式缓存,具有快速、精干等特点,是Hibernate
中默认的CacheProvider
。
一、分布式缓存
我们系统为了提高系统并发,性能、一般对系统进行分布式部署(集群部署方式)。如果不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发。所以要使用分布式缓存对缓存数据进行集中管理,mybatis
无法实现分布式缓存,需要和其它分布式缓存框架进行整合。
二、整合原理
mybatis
提供了一个cache
接口,如果要实现自己的缓存逻辑,实现cache
接口开发即可。
mybatis
和ehcache
整合,mybatis
和ehcache
整合包中提供了一个cache
接口的实现类。
三、整合ehcache
1、引入缓存的依赖包
2、引入缓存配置文件
classpath
下添加:ehcache.xml
配置内容如下:
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="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
那么还要根据timeToIdleSeconds
,timeToLiveSeconds
判断
overflowToDisk
:设定当内存缓存溢出的时候是否将过期的element
缓存到磁盘上
以下属性是可选的:
timeToIdleSeconds
:当缓存在EhCache
中的数据前后两次访问的时间超过timeToIdleSeconds
的属性取值时,这些数据便会删除,默认值是0,也就是可闲置时间无穷大
timeToLiveSeconds
:缓存element
的有效生命期,默认是0.,也就是element
存活时间无穷大
diskSpoolBufferSizeMB
:设置DiskStore
(磁盘缓存)的缓存区大小.默认是30MB.每个Cache
都应该有自己的一个缓冲区.
diskPersistent
: 在JVM重启的时候是否启用磁盘保存EhCache
中的数据,默认是false
。
diskExpiryThreadIntervalSeconds
: 磁盘缓存的清理线程运行间隔,默认是120秒。每个120s,相应的线程会进行一次EhCache
中数据的清理工作
memoryStoreEvictionPolicy
:当内存缓存达到最大,有新的element
加入的时候, 移除缓存中element
的策略。默认是LRU
(最近最少使用),可选的有LFU
(最不常使用)和FIFO
(先进先出)
3、开启ehcache缓存
修改mapper.xml
文件,在cache中指定EhcacheCache
。
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>