1. pom文件中引入jar包
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
2. resources目录下创建ehcache.xml配置文件
或者其他名字的配置文件xxx.xml,并在application.proerties文件中
spring.cache.ehcache.config= # ehcache配置文件地址
指定配置文件地址
SpringBoot会自动为我们配置EhCacheManager的bean。
<?xml version="1.0" encoding="UTF-8" ?>
<ehcache>
<cache name="objectCache" maxElementsInMemory="1000"></cache>
</ehcache>
3. SpringBootApplication上增加 @EnableCaching注解
写一个简单的Controller及get和set两个方法用于测试:
先访问http://127.0.0.1:8080/cache/set 将当前时间放进缓存中,然后在访问http://127.0.0.1:8080/cache/get查看缓存结果,可以发现,在get请求中我们已经正确拿到了之前缓存的数据。
附上EhCacheHelper:
除了按默认配置加载外也可以自己根据指定配置文件创建CacheManager,比如:
public static CacheManager createCacheManager(String cacheConfigFileName){
if(cacheConfigFileName==null)cacheConfigFileName="/ehcache2.xml";
URL url = EhCacheHelper.class.getResource(cacheConfigFileName);
return CacheManager.create(url);
} 如果自定义CacheManager 主应用程序不用加@EnableCaching也可以的。
4. 缓存的设置参数
缓存大小的限制可以设置在CacherManager上,也可以设置在单独的cache上,我们可以设置缓存使用内存的大小,也可以 设置缓存使用磁盘的大小,但是使用堆内存的大小是必须设置的,其他不设可不设,默认不设就是不限制。
Cachemanager级别:
maxBytesLocalHeap:是用来限制缓存所能使用的堆内存的最大字节数的,其单位可以是K、M或G,不区分大小写。默认为0,表示不限制。
maxBytesLocalOffHeap:是用来限制缓存所能使用的非堆内存的最大字节数,其单位也可以是K、M或G。默认是0,表示不限制。
maxBytesLocalDisk:是用来限制缓存所能使用的磁盘的最大字节数的,其单位可以是K、M或G。默认是0,表示不限制。只有在单机环境下才可以使用本地磁盘,分布式环境下是不可以使用的。
Cache级别:
diskStore :将缓存中暂时不使用的对象转移到指定存储位置,可指定磁盘中文件夹位置。
defaultCache :默认的管理策略,如果不加特殊说明,则所有对象按照此配置项处理
name:Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)
maxElementsInMemory:在内存中缓存的elment的最大数目
overflowToDisk:如果内存中数据超过内存限制,是否要缓存到磁盘上
eternal:设定缓存的elemen是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timetoldleSeconds,timeToLiveSeconds判断。
overflowToDisk:如果内存中数据超过内存限制,是否要缓存到磁盘上。
timeToLiveSeconds:对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值为0,表示一直可以访问。(单位:秒)
timeToIdleSeconds:对象空闲时,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值为0。(单位:秒)
diskPersistent:是否在磁盘上持久化。指重启JVM后,数据是否有效,默认为false
diskExpiryThreadIntervalSeconds:对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。默认是120秒。(单位:秒)
memoryStoreEvictionPolicy:如果内存中数据超过内存限制,向磁盘缓存定时的策略,默认值为LRU,可选FIFO、LFU
diskSpoolBufferSizeMB:设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个cache都应该有自己的一个缓冲区。
clearOnFlush:内存数量最大时是否清除。
缓存的3种清空策略:
FIFO:first in first out (先进先出)
LFU:Less Frequency Used (最少使用)一直以来最少被使用的。缓存的元素有一个hit属性,hit值最小的将会被清除缓存。
LRU:Least Recently Used(最近最少使用)(ehcache默认值)缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清除缓存。
本文暂时没有评论,来添加一个吧(●'◡'●)