SpringBoot
【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】
SpringBoot 开发实用篇
文章目录
- SpringBoot
- SpringBoot 开发实用篇
- 5 整合第三方技术
- 5.5 变更缓存供应商 Ehcache
- 5.5.1 缓存实现方案
- 5.5.2 缓存供应商变更
- 5.5.3 小结
- 5.5.4 知识加油站【扩展】
5 整合第三方技术
5.5 变更缓存供应商 Ehcache
5.5.1 缓存实现方案
SpringBoot提供了缓存的统一整合接口,方便缓存技术的开发与管理
- Generic
- JCache
- Ehcache
- Hazelcast
- Infinispan
- Couchbase
- Redis
- Caffeine
- Simple(默认)【之前我们做的都是基于这个默认的,包括手机验证码案例】
- memcached
5.5.2 缓存供应商变更
【为什么要改,因为专门做缓存的公司搞的缓存技术更专业,哈哈哈哈】
【这一节用 Ehcache】
【导入坐标】
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
【配置】
改成ehcache
如果我pom 中不提供坐标,这里又要硬用
可以看到, 工程都跑不起来
恢复正常,再次运行
可以看到,打开了,还是报错了
【原因】
ehcache 是一个 Spring 以外的技术,要想使用必须对它进行配置
在resources 目录下添加一个新的配置文件,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"
updateCheck="false">
<diskStore path="D:\ehcache" />
<!--默认缓存策略 -->
<!-- external:是否永久存在,设置为true则不会被清除,此时与timeout冲突,通常设置为false-->
<!-- diskPersistent:是否启用磁盘持久化-->
<!-- maxElementsInMemory:最大缓存数量-->
<!-- overflowToDisk:超过最大缓存数量是否持久化到磁盘-->
<!-- timeToIdleSeconds:最大不活动间隔,设置过长缓存容易溢出,设置过短无效果,可用于记录时效性数据,例如验证码-->
<!-- timeToLiveSeconds:最大存活时间-->
<!-- memoryStoreEvictionPolicy:缓存清除策略-->
<defaultCache
eternal="false"
diskPersistent="false"
maxElementsInMemory="1000"
overflowToDisk="false"
timeToIdleSeconds="60"
timeToLiveSeconds="60"
memoryStoreEvictionPolicy="LRU" />
</ehcache>
再次重启服务器
OK,成功启动了
跑一下我们做的手机号验证码案例
好家伙,又直接报错了
【原因是】
我们之前写了一个缓存空间名称,想起来了
这玩意儿,现在我们换缓存技术了,它找不到这个东西,
因为默认的时候我们啥也没配,但是,现在换技术了,就要进行配置了
配一下
<cache
name="smsCode"
eternal="false"
diskPersistent="false"
maxElementsInMemory="1000"
overflowToDisk="false"
timeToIdleSeconds="10"
timeToLiveSeconds="10"
memoryStoreEvictionPolicy="LRU" />
现在就声明了这个空间了
再次运行
成功启动,再次跑一下那个案例
获取验证码
校验
没毛病
可以看到,我们压根儿没有修改代码,就添加了一些配置,就无缝换到一种新的缓存技术了
现在试试修改一下缓存的过期时间
那就不改了,这说明什么,10s 钟之后这个缓存就毙掉了
试试
没毛病,刚好十秒
【不同的数据就可以设置不同的缓存策略】【喵喵喵啊!】
回顾一下
- 加入Ehcache坐标(缓存供应商实现)
- 缓存设定为使用Ehcache
- 提供ehcache配置文件ehcache.xml
- 提供ehcache配置文件ehcache.xml
5.5.3 小结
- 变更缓存供应商为Ehcache
5.5.4 知识加油站【扩展】
【数据淘汰策略】
数据淘汰策略中的LRU 和 LFU 的区别
【影响数据淘汰的相关配置】
- 检测易失数据(可能会过期的数据集 server.db[i].expires)
- volatile-Iru:挑选最近最少使用的数据淘汰
- volatile-lfu:挑选最近使用次数最少的数据淘汰
- volatile-ttl:挑选将要过期的数据淘汰
- volatile-random:任意选择数据淘汰
LRU: Least Recently Used
LFU: Least Frequently Used
举个栗子:
在这9秒钟,这四个数据一共被访问了9次,每个key 头上的数字就代表其被访问的次数
下面的秒数 是 对应的key 最后一次被点击的秒数
OK,现在一个问题,5s 和 7s 哪一个访问离现在更短,很明显 是7s
现在这4个 key 中离现在时间最短的是哪个?很明显是 9s【说明9s 对应的name key 刚用过没多久】
最长是5s age, 说明这个key 在这段时间里,已经好久都没有访问过了
那么LRU 就是淘汰age 这种数据,最长时间没有被使用的
再看这两个数据,4 和 1,说明age 使用率比较高
那么LFU 就是这样一种策略,淘汰最不频繁被使用的