【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】
memcached客户端选择:
SpringBoot未提供对memcached的整合,需要使用硬编码方式实现客户端初始化管理【当然现在可能已经有了】
【导入坐标】
先去查一下坐标



直接复制
<dependency>
<groupId>com.googlecode.xmemcachedgroupId>
<artifactId>xmemcachedartifactId>
<version>2.4.7version>
dependency>
记得刷一下

【不用配置,因为当时还没整合】
直接硬用
先把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;
}
}
这样就有了客户端对象
修改我们之前的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;
这样就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;
}
在配置文件自定义配置
memcached:
servers: localhost:11211
poolSize: 10
opTimeout: 3000

注入
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;
}
}
OK, 直接运行服务器,测试【也不是3秒】

OK,这就可以了
回顾一下





【彩蛋】
现在我们已经搞了4个了,默认、Ehcache、Redis、memcached
总会有巨佬觉得这些都不OK,于是阿里推出了 jetcache
