Memcached下载和安装
是一个国内使用量还是比较大的技术
打开文件夹
我们需要在命令行窗口启动
注意要以管理员方式运行
先尝试进入指定文件
然后又再次运行
下载
memcached.exe -d install
启动
memcached.exe -d start
停止
memcached.exe -d stop
memcached.exe -d install
memcached.exe -d start
memcached.exe -d stop
我们打开任务管理器 发现成功运行
Memcached缓存技术
问题是springboot提供整合技术
还没有纳入到整合中
需要使用硬编码的方式实现给客户端初始化管理
我们打开idea
首先得导入坐标
<!-- memcached的依赖--><dependency><groupId>com.google.code.maven-play-plugin.spy</groupId><artifactId>memcached</artifactId><version>2.4.2</version></dependency>
因为springboot没有整合
根本没有配置
所以我们直接采取硬编码的形式
找到业务层的实现类
准备书写代码
我们做一个配置类
目的是为了让Mencached被spring容器加载
配置一个客户端对象
然后加载为spring容器的bean
package com.example.demo.config;import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.spy.memcached.MemcachedClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;@Configuration
public class XMemcachedConfig {@Beanpublic MemcachedClient getmemcachedClient() throws IOException {//配置服务器端口MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder("localhost:11211");//构建启动MemcachedClient memcachedClient=memcachedClientBuilder.build();return memcachedClient;}}
我们直接进行依赖注入
我们接下来补全业务层的代码
书写完毕
package com.example.demo.service.impl;import com.example.demo.domain.SMSCode;
import com.example.demo.service.SMSCodeService;
import com.example.demo.utils.CodeUtils;
import net.rubyeye.xmemcached.MemcachedClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class SMSCodeServiceImpl implements SMSCodeService {@Autowiredprivate CodeUtils codeUtils;@Autowiredprivate MemcachedClient memcachedClient;//以下是Springboot中使用xmemcached@Overridepublic String sendCodeToSMS(String tele) {String code=codeUtils.generator(tele);try{memcachedClient.set(tele,0,code);}catch (Exception e){e.printStackTrace();}return code;}@Overridepublic boolean checkCode(SMSCode smsCode) {String code=null;try{code=memcachedClient.get(smsCode.getTele().toString());}catch (Exception e){e.printStackTrace();}return smsCode.getCode().equals(code);}
}
我们要去改一下缓存的注释
我们把之前采用的缓存方案全部注释掉
# 专门用来配置的对象datasource
spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTCusername: rootpassword: 123456devtools:restart:# 设置不参与热部署的文件或文件夹exclude: static/**,public/**,config/application.yml
启动成功
去postman发起请求测试
我们通过修改客户端的数值
能改变一些设置
如设置缓存失效时间
硬编码
就是手搓客户端对象
然后交给spring容器管理后
在业务层的实现类注入
使用缓存的时候使用set
获取缓存数据的时候使用get
但是我们这边还有个问题
就是在书写客户端的时候
这个数据应该从配置文件里去处理
先写一个类
这个类有成员属性 代表的是各种配置信息
我们需要做的是自定义配置
memcached:servers: localhost:11211poolSize: 10opTimeout: 3000
然后在类里面去读取
package com.example.demo.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "memcached")
@Data
public class XMemcachedProperties {private String servers;private int poolSize;private long opTimeout;
}
这样我们的类就能成功加载
@Component注解又能让这个类被spring容器管理
我们在这边直接注入就行
只不过是数值换了一个地方加载
package com.example.demo.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;@Configuration
public class XMemcachedConfig {@Autowiredprivate XMemcachedProperties memcachedProperties;@Beanpublic MemcachedClient getmemcachedClient() throws IOException {//配置服务器端口MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(memcachedProperties.getServers());//配置数据库连接池最大连接量memcachedClientBuilder.setConnectionPoolSize(memcachedProperties.getPoolSize());//配置缓存时间memcachedClientBuilder.setConnectTimeout(memcachedProperties.getOpTimeout());//构建启动MemcachedClient memcachedClient=memcachedClientBuilder.build();return memcachedClient;}}
发起请求
成功
个人号推广
博客主页
多多!-CSDN博客
Web后端开发
https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482
Web前端开发
https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482
数据库开发
https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482
项目实战
https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482
算法与数据结构
https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482
计算机基础
https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482
回忆录
https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482