1、简介
redis is an open source (bsd licensed), in-memory data structure store, used as a database, cache, and message broker.
内容来自samhan
翻译:Redis 是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。 内容来自zvvq
Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到 100000+的 QPS。
QPS(Queries-per-second),每秒内查询次数。(百度百科)
它存储的 value 类型比较丰富,也被称为结构化的 NoSQL 数据库。 内容来自zvvq
NoSQL(Not only SQL),不仅仅是 SQL,泛指非关系型数据库。 内容来自samhan
NoSQL 数据库并不是要取代关系型数据库,而是关系型数据库的补充。 内容来自samhan
关系型数据库(RDBMS) zvvq好,好zvvq
MySQL 本文来自zvvq
Oracle zvvq.cn
DB2
SQL Server 内容来自zvvq,别采集哟
非关系型数据库(NoSQL)
Redis
Mongo db
MemCached
内容来自zvvq,别采集哟
Redis 应用场景
内容来自zvvq
缓存
任务队列 zvvq
消息队列 内容来自zvvq,别采集哟
分布式锁 内容来自zvvq
2、介绍
Reddis官方推荐的Java客户端有三种:Jedis、Lettuce、Redisson。 内容来自samhan
Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis。
在 Spring Boot 项目中还提供了对应的 Starter,即 spring-boot-starter-data-redis。 zvvq好,好zvvq
在这里直接使用的是Spring Data Redis,且不展示Redis的下载和安装过程啦。
3、前期配置
3.1、坐标导入在创建完成Spring Boot项目之后,在pom.xml中加入spring-boot-start-data-redis的依赖坐标
内容来自samhan666
1
2
3
内容来自zvvq
4
本文来自zvvq
5 zvvq
<!--Spring Data Redis--> zvvq.cn
<dependency> zvvq好,好zvvq
<groupId>org.springframework.boot</groupId> zvvq
<artifactId>spring-boot-starter-data-redis</artifactId> zvvq.cn
</dependency>
copyright zvvq
这里忽略了其他的配置如MySQL这些,只突出Redis的配置信息
内容来自samhan666
spring: Redis配置 redis: host: localhost port: 6379 根据自己设置的密码决定 password: 123456 操作0号数据库,默认有16个数据库 database: 0 jedis: pool: max-active: 8 最大连接数 max-wait: 1ms 连接池最大阻塞等待时间 max-idle: 4 连接池中的最大空闲连接 min-idle: 0 连接池中的最小空闲连接3.3、配置类使用专门的客户端接口操作,将 Redis 整合到 Spring Boot 中。这里采用的是 RedisTemplate 工具类,该工具类由 SpringBoot 框架提供。 内容来自samhan666
RedisTemplate 在处理 key 和 value 时,会对其进行序列化操作,这就会导致一些问题。
zvvq
比如:输入的 key 值是 city,但 redis 获得到的 key 值却是 \xac]xed\x00\x05t\x00\x04city。 zvvq好,好zvvq
因此就需要一个专门的配置类,来专门处理 RedisTemplate 默认的序列化处理所导致的问题。 内容来自zvvq,别采集哟
值得注意的是,这里是重新加载一个新的序列化器来取代原来的序列化器,这就证明着其原本是有着自己默认的序列化器JdkSerializationRedisSerializer。 内容来自zvvq,别采集哟
1
内容来自samhan666
2
内容来自samhan666
3
内容来自samhan
4
5
内容来自samhan666
6
7
内容来自samhan666
8 zvvq.cn
9
10
zvvq.cn
11 zvvq
12
13 内容来自samhan666
14 zvvq好,好zvvq
15
本文来自zvvq
16 zvvq好,好zvvq
17
/ 内容来自samhan666
@classname RedisConfig 内容来自zvvq
@description Redis配置类,更换key的默认序列化器
@author xBaozi
内容来自zvvq
@date 19:04 2022/7/2
zvvq
/
内容来自samhan
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
内容来自zvvq,别采集哟
@Bean zvvq
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); zvvq
redisTemplate.setKeySerializer(new StringRedisSerializer()); zvvq.cn
redisTemplate.setHashKeySerializer(new StringRedisSerializer()); zvvq好,好zvvq
redisTemplate.setConnectionFactory(connectionFactory); 内容来自zvvq
return redisTemplate;
zvvq
} zvvq好,好zvvq
} zvvq好,好zvvq
4、Java操作Redis
在这里由于代码比较隐私(主要是懒得整理登录和生成验证码的接口放在这里),因此这里就直接使用测试类进行演示。
发送验证码
内容来自zvvq
1
本文来自zvvq
2 zvvq
3 zvvq
4 内容来自zvvq,别采集哟
5
内容来自samhan666
6 内容来自samhan666
7 zvvq.cn
8
9 内容来自samhan
10
内容来自samhan
11 zvvq
12 copyright zvvq
13
copyright zvvq
@PostMapping("/sendMsg")
public Result<String> sendMsg(@RequestBody User user, HttpSession session) { 本文来自zvvq
// 获取需要发送短信的手机号 内容来自samhan
String userPhone = user.getPhone();
if (StringUtils.isNotEmpty(userPhone)) { zvvq.cn
// 随机生成4位验证码 内容来自samhan
String checkCode = ValidateCodeUtils.generateValidateCode4String(4);
内容来自zvvq
// 将生成的验证码保存到Redis中并设置有效期五分钟 zvvq好,好zvvq
redisTemplate.opsForValue().set(userPhone, checkCode, 5, TimeUnit.MINUTES); 本文来自zvvq
return Result.success(checkCode);
} 本文来自zvvq
return Result.error("短信发送错误");
zvvq
} zvvq.cn
内容来自samhan
输入验证码登录 本文来自zvvq
1 内容来自samhan666
2
3 zvvq好,好zvvq
4
5
6
内容来自samhan
7 内容来自samhan666
8 copyright zvvq
9 zvvq
10 zvvq
11
zvvq好,好zvvq
12
zvvq
13
内容来自zvvq,别采集哟
14 本文来自zvvq
15 内容来自zvvq
16
17
内容来自samhan
18 本文来自zvvq
19
内容来自samhan
@PostMapping("/login")
内容来自zvvq
public Result<User> login(@RequestBody Map map, HttpSession session) {
内容来自zvvq
log.info("map: {}", map); 内容来自zvvq
// 获取用户输入信息 zvvq
String phone = (String)map.get("phone");
String code = (String)map.get("code");
// 从Redis中取出验证码 本文来自zvvq
String checkCode = redisTemplate.opsForValue().get(phone);
// 比对验证码是否一致 内容来自samhan
if (StringUtils.isNotEmpty(checkCode) && checkCode.equals(code.toLowerCase())) {
内容来自samhan666
// 将用户id存放到session中 zvvq.cn
session.setAttribute("user", user.getId()); zvvq
// 登录成功,删除Redis中的验证码 copyright zvvq
redisTemplate.delete(phone);
// 将用户信息返回到前端 内容来自samhan
return Result.success(user); 内容来自samhan666
} 内容来自zvvq,别采集哟
return Result.error("登录失败,请检查手机号或验证码是否正确");
}
以上就是SpringBoot怎么整合Redis缓存验证码的详细内容,更多请关注其它相关文章!