SpringBoot
【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】
SpringBoot 开发实用篇
文章目录
- SpringBoot
- SpringBoot 开发实用篇
- 5 整合第三方技术
- 5.8 变更缓存供应商 memcached
- 5.8.1 memcached 缓存更换
- 5.8.2 小结
5 整合第三方技术
5.8 变更缓存供应商 memcached
5.8.1 memcached 缓存更换
memcached客户端选择:
- Memcached Client for Java:最早期客户端,稳定可靠,用户群广
- SpyMemcached:效率更高
- Xmemcached:并发处理更好
SpringBoot未提供对memcached的整合,需要使用硬编码方式实现客户端初始化管理【当然现在可能已经有了】
【导入坐标】
先去查一下坐标
直接复制
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>2.4.7</version>
</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,这就可以了
回顾一下
- 加入Xmemcache坐标(缓存供应商实现)
- 创建读取属性配置信息类,加载配置
- 创建客户端配置类
- 配置memcached属性
5.8.2 小结
- xmemcached客户端加载方式(bean初始化)
- xmemcached客户端使用方式(set & get)
【彩蛋】
现在我们已经搞了4个了,默认、Ehcache、Redis、memcached
总会有巨佬觉得这些都不OK,于是阿里推出了 jetcache