1、引入Ehcache相关核心依赖,其他数据库等依赖不一一列举,根据自己需要进行引入
<!--ehcache 缓存-->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
2、引入ehcache 相关配置文件
<?xml version="1.0" encoding="gbk"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="30" timeToLiveSeconds="30" overflowToDisk="false"/>
<!--
配置自定义缓存
maxElementsInMemory:缓存中允许创建的最大对象数
eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,
两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,
如果该值是 0 就意味着元素可以停顿无穷长的时间。
timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,
这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。
overflowToDisk:内存不足时,是否启用磁盘缓存。
memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。
LFU:最不经常使用
FIFO:先进先出
LRU:最近最少使用
-->
<cache name="user"
maxElementsInMemory="512"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="17400"
timeToLiveSeconds="18000"
memoryStoreEvictionPolicy="LFU" />
</ehcache>
3、引入ehcache 配置类
/**
* 本地堆缓存配置类
* @author asus
*/
@Configuration //将ehcache 配置文件注入spring 容器
@EnableCaching //开启缓存
public class EhcacheConfig {
@Bean
public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
//取上文的配置文件xml
cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
cacheManagerFactoryBean.setShared(true);
return cacheManagerFactoryBean;
}
@Bean
public EhCacheCacheManager eCacheCacheManager(EhCacheManagerFactoryBean bean) {
return new EhCacheCacheManager(bean.getObject());
}
}
4、测试controller 类 代码
这边写了两个ehcache 的测试方法
spring为我们提供了注解来使用缓存
@Cacheable:该注解放置于方法上,标识该方法开启缓存,执行该方法时,会检查缓存中是否存在数据,如果存在则不从数据库查询,value指定缓存名字;此处表示该缓存使用ehcache 配置文件的名为user的缓存策略
@CacheEvict:清除缓存的注解,放置于方法上,value指定清除哪个缓存,此处表示清除user缓存。
@CachePut:该注解放置于方法上,标识该方法开启缓存,与Cacheable 的区别在于,Cacheable会先检查是否存在,而CachePut则不会进行检查,直接写入。
5、测试截图
项目启动,我们先测试使用缓存的方法
第一次使用postman 进行访问,情况如下
第一次访问,没有使用缓存,可以看到控制台输出信息
第二次使用postman 访问,情况如下
控制台输出如下,没有查询数据库,并且可以看到postman请求时间大大减少
再测试清除缓存的方法
清除成功
再访问查询方法看下,可以看到请求时间