除了我们默认的缓存形式simlpe之外, 我们其实还有许多其他种类的缓存供应
Ehcache就是其中的一种形式
Ehcache在SpringBoot当中的使用:
其实跟我们之前整合第三方的资源是一样的形式
1>导入依赖:
<!-- 更换缓存, 将默认使用的 Simple 更换为Ehcache-->
<dependency>
<groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId>
</dependency>
2>加载对应的配置文件:
配置一:
首先是有关Ehcache的相关配置 , 设置其配置的名称为:
ehcache.xml即可 默认的名称也是这样的
配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<!-- 磁盘缓存位置 -->
<diskStore path="java.io.tmpdir/ehcache"/>
<!-- 默认缓存 -->
<defaultCache
maxEntriesLocalHeap="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
maxEntriesLocalDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"/>
<!--第三个, 以及第四个属性 是用来设置对应的缓存的存在时间的, 超过时间就会自己自动的清空缓存-->
<cache name="smsCode"
maxElementsInMemory="60"
eternal="false"
timeToIdleSeconds="20"
timeToLiveSeconds="20"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"/>
</ehcache>
配置二:
在我们的SpringBoot的配置文件当中修改:
# 设置我们当前使用的缓存, 默认的情况下就是一个 Simple 的类
# 我们也可以自己进行变更, 将其设置成为一个对应的 ehcache的类型
cache:
type: ehcache
3>开启缓存
实际上跟之前使用我们默认开启缓存的方式是一样的
第一步都是需要我们在配置类当中打开对应的缓存设置
@SpringBootApplication //配置类当中设置我们当前是允许开启缓存的` @EnableCaching public class Spring19CacheApplication {
之后在我们需要使用的类的方法之上添加对应的注解:
@Cacheable(value= , key =)
@CachePut(value=, key = )
这里的value指的是我们的实例的缓存 第二个key指的是我们对应的唯一标识
这两个之间的区别还是比较大的, 我们来粗浅的做一下比对, 分析
4>@Cacheable与@CachePut:
@Cacheable:
仅仅第一次获取数据是依靠我们设置的方法进行获取的, 之后再次使用的时候, 都是根据我们的实力缓存当中获取的
@Cacheable(value = "smsCode",key = "#tel")
public String sendCodeToSMS(String tel) {
System.out.println("==================CachePut方法被执行了!!!!=================");
String generator = code.generator(tel);
return generator;
}
使用这种方式, 我们针对同一个手机号, 发送多次请求, 依旧是仅仅只有一个结果
那么就说明我们的方法仅仅只用了一次
之后使用的都是缓存当中的数据了
@CachePut:
每一次都会调用对应的方法, 不是从我们的缓存值当中去拿的, 而是每一次都会将我们的返回值放进缓存内部!
@CachePut(value = "smsCode",key = "#tel")
public String sendCodeToSMS(String tel) {
System.out.println("==================CachePut方法被执行了!!!!=================");
String generator = code.generator(tel);
return generator;
}
比如我们使用手机号获取验证码的一个小功能, 这里发送几次请求, 就有几个返回过来的验证码, 即使是针对同一个的手机号, 在很短的时间内