步骤①:导入xmemcached的坐标
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>2.4.7</version>
</dependency>
步骤②:配置memcached,制作memcached的配置类(后面会配置配置文件)
@Configuration
public class XMemcachedConfig {
@Bean
public MemcachedClient getMemcachedClient() throws IOException {
MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder("localhost:11211");
MemcachedClient memcachedClient = memcachedClientBuilder.build();
return memcachedClient;
}
}
步骤③:使用xmemcached客户端操作缓存,注入MemcachedClient对象
/**这段代码是一个实现了SMSCodeService接口的服务类。
* 通过这段代码,我们可以看到该服务类依赖于CodeUtils和MemcachedClient对象,用于生成验证码和存储/获取验证码。
* 它提供了发送验证码和验证验证码的功能。*/
/*@Service: 这个注解表示这是一个服务类,用于处理业务逻辑。*/
@Service
public class SMSCodeServiceImpl implements SMSCodeService {
/*@Autowired: 这个注解用于自动注入依赖的CodeUtils和MemcachedClient对象*/
@Autowired
private CodeUtils codeUtils;
@Autowired
private MemcachedClient memcachedClient;
/*sendCodeToSMS(String tele): 这个方法用于发送验证码到手机号。
它首先使用codeUtils对象生成一个验证码,然后使用memcachedClient对象将验证码存储到缓存中,有效期为10秒,并返回生成的验证码。*/
@Override
public String sendCodeToSMS(String tele) {
String code = codeUtils.generator(tele);
try {
memcachedClient.set(tele,10,code);
} catch (Exception e) {
e.printStackTrace();
}
return code;
}
/*checkCode(SMSCode smsCode): 这个方法用于验证用户输入的验证码是否正确。
它首先通过memcachedClient对象从缓存中获取之前存储的验证码,然后将用户输入的验证码与从缓存中获取的验证码进行比较,
如果相等则返回true,否则返回false。*/
@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);
}
}
SMSCodeServiceImpl实现的接口
public interface SMSCodeService {
public String sendCodeToSMS(String tele);
public boolean checkCode(SMSCode smsCode);
}
定义配置属性
以下过程采用前期学习的属性配置方式进行,当前操作有助于理解原理篇中的很多知识。
- 定义配置类,加载必要的配置属性,读取配置文件中memcached节点信息
/*这段代码是一个XMemcached的配置属性类。
通过这个类,我们可以在配置文件中配置XMemcached的服务器地址、连接池大小和操作超时时间,
并通过@Autowired注解自动注入到需要使用这些属性的类中。*/
/*@Component: 这个注解表示这是一个Spring组件,会被自动扫描并注册为一个bean*/
@Component
/*@ConfigurationProperties(prefix = "memcached"): 这个注解表示这个类的属性值会从配置文件中读取,其中prefix指定了属性的前缀。*/
@ConfigurationProperties(prefix = "memcached")
/*@Data: 这个注解是Lombok提供的注解,用于自动生成getter、setter、toString等方法。*/
@Data
/*这个类有三个属性:
servers: 用于配置XMemcached服务器的地址。
poolSize: 用于配置连接池的大小。
opTimeout: 用于配置操作的超时时间。*/
public class XMemcachedProperties {
private String servers;
private int poolSize;
private long opTimeout;
}
- 定义memcached节点信息
yaml格式
memcached:
servers: localhost:11211
poolSize: 10
opTimeout: 3000
- 在memcached配置类中加载信息
/*这段代码是一个Spring配置类,用于配置XMemcached的客户端
* 通过这段代码,我们可以获取到一个已经配置好的MemcachedClient对象,用于与XMemcached服务器进行通信。*/
@Configuration
public class XMemcachedConfig {
/*@Autowired: 这个注解用于自动注入依赖的XMemcachedProperties对象。*/
@Autowired
private XMemcachedProperties memcachedProperties;
@Bean
/*/*getMemcachedClient(): 这个方法返回一个MemcachedClient对象。*/
public MemcachedClient getMemcachedClient() throws IOException {
/*MemcachedClientBuilder: 这个类是XMemcached提供的用于构建MemcachedClient对象的构建器。
* XMemcachedClientBuilder: 这个类继承自MemcachedClientBuilder,用于构建XMemcachedClient对象。
* memcachedProperties.getServers(): 这个方法获取配置的服务器地址。*/
MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(memcachedProperties.getServers());
/*memcachedClientBuilder.setConnectionPoolSize(): 这个方法设置连接池的大小。*/
memcachedClientBuilder.setConnectionPoolSize(memcachedProperties.getPoolSize());
/*memcachedClientBuilder.setOpTimeout(): 这个方法设置操作超时时间。*/
memcachedClientBuilder.setOpTimeout(memcachedProperties.getOpTimeout());
/*memcachedClientBuilder.build(): 这个方法用于构建MemcachedClient对象。*/
MemcachedClient memcachedClient = memcachedClientBuilder.build();
/*return memcachedClient;: 这个语句返回创建的MemcachedClient对象。*/
return memcachedClient;
}
}
总结**
- memcached安装后需要启动对应服务才可以对外提供缓存功能,安装memcached服务需要基于windows系统管理员权限(这个去网上找教程吧)
- 由于springboot没有提供对memcached的缓存整合方案,需要采用手工编码的形式创建xmemcached客户端操作缓存
- 导入xmemcached坐标后,创建memcached配置类,注册MemcachedClient对应的bean,用于操作缓存
- 初始化MemcachedClient对象所需要使用的属性可以通过自定义配置属性类的形式加载