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


    SpringBoot

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

    SpringBoot 开发实用篇

    5 整合第三方技术

    5.8 变更缓存供应商 memcached
    5.8.1 memcached 缓存更换

    memcached客户端选择:

    • Memcached Client for Java:最早期客户端,稳定可靠,用户群广
    • SpyMemcached:效率更高
    • Xmemcached:并发处理更好

    SpringBoot未提供对memcached的整合,需要使用硬编码方式实现客户端初始化管理【当然现在可能已经有了】

    【导入坐标】

    先去查一下坐标

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    直接复制

    <dependency>
        <groupId>com.googlecode.xmemcachedgroupId>
        <artifactId>xmemcachedartifactId>
        <version>2.4.7version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    记得刷一下

    在这里插入图片描述

    【不用配置,因为当时还没整合】

    直接硬用

    先把memcached 交给Spring 容器进行管理

    package com.dingjiaxiong.config;
    
    import net.rubyeye.xmemcached.MemcachedClient;
    import net.rubyeye.xmemcached.MemcachedClientBuilder;
    import net.rubyeye.xmemcached.XMemcachedClientBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.io.IOException;
    
    /**
     * ClassName: XMemcachedConfig
     * date: 2022/10/21 19:09
     *
     * @author DingJiaxiong
     */
    
    @Configuration
    public class XMemcachedConfig {
    
        @Bean
        public MemcachedClient getMemcachedClient() throws IOException {
            MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder("localhost:11211");
    
            MemcachedClient memcachedClient = memcachedClientBuilder.build();
            return memcachedClient;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    这样就有了客户端对象

    修改我们之前的SMS 实现类

    @Autowired
    private MemcachedClient memcachedClient;
    
    @Override
    public String sendCodeToSMS(String tele) {
    
        String code = codeUtils.generator(tele);
    
        try {
            memcachedClient.set(tele,0,code);
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        return code;
    }
    
    @Override
    public boolean checkCode(SMSCode smsCode) {
    
        String code = null;
    
        try {
            code = memcachedClient.get(smsCode.getTele()).toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        return smsCode.getCode().equals(code);
    }
    
    
    @Autowired
    private CodeUtils codeUtils;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    这样就OK了

    在这里插入图片描述

    改一下配置

    在这里插入图片描述

    不用这些了

    控制器也提示要抛一个异常

    在这里插入图片描述

    OK,直接运行

    在这里插入图片描述

    拿出经典手机验证码,测试

    在这里插入图片描述

    校验

    在这里插入图片描述

    在这里插入图片描述

    笔者直接报了空指针异常【好家伙, 看看】

    我寻思没错啊,OK,我瞎了

    笔者前面电话用的82,后面用的88

    在这里插入图片描述

    重新来一次

    在这里插入图片描述

    83

    在这里插入图片描述

    没毛病

    现在让它8秒钟失效

    在这里插入图片描述

    重启服务器,再次测试

    在这里插入图片描述

    OK,就是这样【后面出空指针异常是因为没取到】

    现在就还有个问题

    在这里插入图片描述

    这样写太low 了,现在将其写到配置文件中,然后进行属性注入

    创建一个新的实体类

    package com.dingjiaxiong.config;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * ClassName: XMemcachedProperties
     * date: 2022/10/21 19:40
     *
     * @author DingJiaxiong
     */
    
    @Component
    @Data
    @ConfigurationProperties(prefix = "memcached")
    public class XMemcachedProperties {
    
        private String servers;
        private int poolSize;
        private long opTimeout;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在配置文件自定义配置

    memcached:
      servers: localhost:11211
      poolSize: 10
      opTimeout: 3000
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    注入

    package com.dingjiaxiong.config;
    
    import net.rubyeye.xmemcached.MemcachedClient;
    import net.rubyeye.xmemcached.MemcachedClientBuilder;
    import net.rubyeye.xmemcached.XMemcachedClientBuilder;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.io.IOException;
    
    /**
     * ClassName: XMemcachedConfig
     * date: 2022/10/21 19:09
     *
     * @author DingJiaxiong
     */
    
    @Configuration
    public class XMemcachedConfig {
    
        @Autowired
        private XMemcachedProperties xMemcachedProperties;
    
        @Bean
        public MemcachedClient getMemcachedClient() throws IOException {
            MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(xMemcachedProperties.getServers());
            memcachedClientBuilder.setConnectionPoolSize(xMemcachedProperties.getPoolSize());
            memcachedClientBuilder.setOpTimeout(xMemcachedProperties.getOpTimeout());
            MemcachedClient memcachedClient = memcachedClientBuilder.build();
            return memcachedClient;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    OK, 直接运行服务器,测试【也不是3秒】

    在这里插入图片描述

    OK,这就可以了

    回顾一下

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

    在这里插入图片描述

    • 创建读取属性配置信息类,加载配置

    在这里插入图片描述

    • 创建客户端配置类

    在这里插入图片描述

    • 配置memcached属性

    在这里插入图片描述

    在这里插入图片描述

    5.8.2 小结
    1. xmemcached客户端加载方式(bean初始化)
    2. xmemcached客户端使用方式(set & get)

    【彩蛋】

    现在我们已经搞了4个了,默认、Ehcache、Redis、memcached

    总会有巨佬觉得这些都不OK,于是阿里推出了 jetcache

    在这里插入图片描述

  • 相关阅读:
    Java基础面试
    java计算机毕业设计springboot+vue小微企业人才推荐系统
    【你不知道的javascript上】this指针,函数的call、apply、bind,new 操作符到底发生了什么
    (附源码)spring boot学业指导系统 毕业设计 030958
    Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution
    sentinel的四种流控规则介绍
    摄影后期图像编辑软件Lightroom Classic 2023 mac中文特点介绍
    EtherCAT从站EEPROM分类附加信息详解:RXPDO(输入过程数据对象)
    类似火车头的采集器-免费任意数据采集器
    【JS笔记】JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127957454