zvvq技术分享网

SpringBoot怎么整合Redis缓存验证码(spring boot redi

作者:zvvq博客网
导读1、简介 redis is an open source (bsd licensed), in-memory data structure store, used as a database, cache, and message broker. 翻译:Redis 是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消

1、简介

redis is an open source (bsd licensed), in-memory data structure store, used as a database, cache, and message broker.

本文来自zvvq

翻译:Redis 是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。

本文来自zvvq

Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到 100000+的 QPS。

zvvq

QPS(Queries-per-second),每秒内查询次数。(百度百科)

内容来自zvvq,别采集哟

它存储的 value 类型比较丰富,也被称为结构化的 NoSQL 数据库。 内容来自samhan

NoSQL(Not only SQL),不仅仅是 SQL,泛指非关系型数据库。

本文来自zvvq

NoSQL 数据库并不是要取代关系型数据库,而是关系型数据库的补充。

zvvq

关系型数据库(RDBMS) zvvq.cn

MySQL

zvvq好,好zvvq

Oracle 内容来自zvvq

DB2

内容来自samhan

SQL Server 内容来自samhan666

非关系型数据库(NoSQL) 内容来自zvvq,别采集哟

Redis

内容来自samhan

Mongo db

本文来自zvvq

MemCached

zvvq好,好zvvq

Redis 应用场景

本文来自zvvq

缓存

内容来自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

zvvq.cn

2 内容来自zvvq,别采集哟

3 copyright zvvq

4 zvvq好,好zvvq

5 内容来自samhan666

<!--Spring Data Redis--> zvvq.cn

<dependency>

内容来自samhan666

<groupId>org.springframework.boot</groupId>

copyright zvvq

<artifactId>spring-boot-starter-data-redis</artifactId> zvvq.cn

</dependency> 本文来自zvvq

3.2、配置文件

这里忽略了其他的配置如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 时,会对其进行序列化操作,这就会导致一些问题。

内容来自samhan

比如:输入的 key 值是 city,但 redis 获得到的 key 值却是 \xac]xed\x00\x05t\x00\x04city。 copyright zvvq

因此就需要一个专门的配置类,来专门处理 RedisTemplate 默认的序列化处理所导致的问题。

内容来自samhan666

值得注意的是,这里是重新加载一个新的序列化器来取代原来的序列化器,这就证明着其原本是有着自己默认的序列化器JdkSerializationRedisSerializer。 内容来自zvvq

1

zvvq

2

内容来自samhan

3 内容来自samhan

4 copyright zvvq

5 copyright zvvq

6 内容来自samhan666

7 zvvq

8

zvvq.cn

9

zvvq.cn

10

本文来自zvvq

11

本文来自zvvq

12

zvvq.cn

13

内容来自samhan

14

zvvq.cn

15

内容来自zvvq

16 内容来自zvvq,别采集哟

17

zvvq

/

内容来自samhan

@classname RedisConfig

copyright zvvq

@description Redis配置类,更换key的默认序列化器

copyright zvvq

@author xBaozi

内容来自samhan

@date 19:04 2022/7/2 copyright zvvq

/ 本文来自zvvq

@Configuration

zvvq.cn

public class RedisConfig extends CachingConfigurerSupport { 内容来自zvvq

@Bean

zvvq好,好zvvq

public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

zvvq好,好zvvq

RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); 内容来自samhan

redisTemplate.setKeySerializer(new StringRedisSerializer());

内容来自samhan666

redisTemplate.setHashKeySerializer(new StringRedisSerializer());

zvvq

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

内容来自samhan

11

本文来自zvvq

12

copyright zvvq

13

内容来自samhan

@PostMapping("/sendMsg")

zvvq好,好zvvq

public Result<String> sendMsg(@RequestBody User user, HttpSession session) {

内容来自zvvq,别采集哟

// 获取需要发送短信的手机号 内容来自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

输入验证码登录

zvvq.cn

1

zvvq.cn

2 zvvq

3 copyright zvvq

4 内容来自zvvq,别采集哟

5 内容来自samhan666

6

内容来自samhan666

7

zvvq.cn

8

内容来自samhan

9

zvvq好,好zvvq

10 内容来自zvvq

11 zvvq

12 zvvq

13 zvvq

14 内容来自zvvq,别采集哟

15 内容来自zvvq,别采集哟

16 zvvq好,好zvvq

17 zvvq.cn

18

zvvq

19

zvvq好,好zvvq

@PostMapping("/login") 本文来自zvvq

public Result<User> login(@RequestBody Map map, HttpSession session) {

内容来自samhan

log.info("map: {}", map);

copyright zvvq

// 获取用户输入信息

zvvq好,好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中的验证码

zvvq好,好zvvq

redisTemplate.delete(phone);

内容来自samhan

// 将用户信息返回到前端

内容来自zvvq,别采集哟

return Result.success(user);

内容来自samhan666

}

copyright zvvq

return Result.error("登录失败,请检查手机号或验证码是否正确");

zvvq.cn

} copyright zvvq

内容来自samhan

以上就是SpringBoot怎么整合Redis缓存验证码的详细内容,更多请关注其它相关文章!

内容来自zvvq,别采集哟