• SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.5 变更缓存供应商 Ehcache


    SpringBoot

    【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

    SpringBoot 开发实用篇

    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.ehcachegroupId>
        <artifactId>ehcacheartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    【配置】

    在这里插入图片描述

    改成ehcache

    在这里插入图片描述

    如果我pom 中不提供坐标,这里又要硬用

    在这里插入图片描述

    可以看到, 工程都跑不起来

    恢复正常,再次运行

    在这里插入图片描述

    可以看到,打开了,还是报错了

    【原因】

    ehcache 是一个 Spring 以外的技术,要想使用必须对它进行配置

    在resources 目录下添加一个新的配置文件,ehcache.xml

    在这里插入图片描述

    
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
             updateCheck="false">
        <diskStore path="D:\ehcache" />
    
        
        
        
        
        
        
        
        
        <defaultCache
            eternal="false"
            diskPersistent="false"
            maxElementsInMemory="1000"
            overflowToDisk="false"
            timeToIdleSeconds="60"
            timeToLiveSeconds="60"
            memoryStoreEvictionPolicy="LRU" />
    
    ehcache>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    再次重启服务器

    在这里插入图片描述

    OK,成功启动了

    跑一下我们做的手机号验证码案例

    在这里插入图片描述

    好家伙,又直接报错了

    【原因是】

    我们之前写了一个缓存空间名称,想起来了

    在这里插入图片描述

    这玩意儿,现在我们换缓存技术了,它找不到这个东西,

    在这里插入图片描述

    因为默认的时候我们啥也没配,但是,现在换技术了,就要进行配置了

    配一下

    <cache
            name="smsCode"
            eternal="false"
            diskPersistent="false"
            maxElementsInMemory="1000"
            overflowToDisk="false"
            timeToIdleSeconds="10"
            timeToLiveSeconds="10"
            memoryStoreEvictionPolicy="LRU" />
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    现在就声明了这个空间了

    再次运行

    在这里插入图片描述

    成功启动,再次跑一下那个案例

    获取验证码

    在这里插入图片描述

    校验

    在这里插入图片描述

    没毛病

    可以看到,我们压根儿没有修改代码,就添加了一些配置,就无缝换到一种新的缓存技术了

    现在试试修改一下缓存的过期时间

    在这里插入图片描述

    那就不改了,这说明什么,10s 钟之后这个缓存就毙掉了

    试试

    在这里插入图片描述

    没毛病,刚好十秒

    【不同的数据就可以设置不同的缓存策略】【喵喵喵啊!】

    回顾一下

    • 加入Ehcache坐标(缓存供应商实现)

    在这里插入图片描述

    • 缓存设定为使用Ehcache

    在这里插入图片描述

    • 提供ehcache配置文件ehcache.xml

    在这里插入图片描述

    • 提供ehcache配置文件ehcache.xml

    在这里插入图片描述

    5.5.3 小结
    1. 变更缓存供应商为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 就是这样一种策略,淘汰最不频繁被使用的

    在这里插入图片描述

  • 相关阅读:
    汽车IVI中控开发入门及进阶(十五):AUTOSAR
    6. 【图的应用1】最⼩⽣成树(Prim、kruskal)、最短路径(BFS、Dijkstra、Floyd{含有快速求解})
    智能合约平台开发指南
    Linux安装pycharm
    SpringCloud系列——Feign+Ribbon配置实战篇
    element-ul基本使用
    LVS+Keepalived群集
    WordPress密码丢失,如何修改密码
    强力解决使用node版本管理工具 NVM 出现的问题(找不到 node,或者找不到 npm)
    精通Spring Boot单元测试:构建健壮的Java应用
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127957296