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