springboot整合redis之用户手机验证码注册登录
目录
1搭建项目开发环境
1.1安装redis
1.1.1下载redis
1.1.2安装redis
1.1.3设置redis为windows服务
安装为windows服务
1.2启动idea
1.3增加redis配置服务类
1.3.1增加接口类
1.2.3增加服务实现类
2.1.4redis集成完成
3springboot集成redis应用场景
3.1用户手机注册获取验证码
3.2代码实现
3.2.1http业务请求层
3.2.1业务服务处理层代码
3.2.3代码测试
使用postman请求接口如下图
查看redis缓存是否存在
4总结
5个人说明
1搭建项目开发环境
1.1安装redis
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
1.1.1下载redis
下载地址:
windows版本:https://github.com/MSOpenTech/redis/releases
Linux版本:官网下载:http://www.redis.cn/git下载https://github.com/antirez/redis/releases
1.1.2安装redis
将下载的Redis-x64-3.2.100.zip 解压到某个地址。
1.1.3设置redis为windows服务
把redis设置为一个windows服务。
安装之前,windows服务是不包含redis服务的
安装为windows服务
安装命令: redis-server.exe --service-install redis.windows.conf 使用命令,安装成功,如图所以:
1.2启动idea
- 找到项目配置文件
向application.yml添加如下配置
redis:key:prefix:authCode: "portal:authCode:"orderId: "portal:orderId:"expire:authCode: 60 # 验证码超期时间host: localhost # Redis服务器地址database: 0 # Redis数据库索引(默认为0)port: 6379 # Redis服务器连接端口password: # Redis服务器连接密码(默认为空)jedis:pool:max-active: 8 # 连接池最大连接数(使用负值表示没有限制)max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)max-idle: 8 # 连接池中的最大空闲连接min-idle: 0 # 连接池中的最小空闲连接timeout: 3000ms # 连接超时时间(毫秒)
3向pom.xml中增加redis配置
<!--redis依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
1.3增加redis配置服务类
1.3.1增加接口类
public interface RedisService {/*** 存储数据*/void set(String key, String value);/*** 获取数据*/String get(String key);/*** 设置超期时间*/boolean expire(String key, long expire);/*** 删除数据*/void remove(String key);/*** 自增操作* @param delta 自增步长*/Long increment(String key, long delta);}
1.2.3增加服务实现类
@Service
public class RedisServiceImpl implements RedisService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Overridepublic void set(String key, String value) {stringRedisTemplate.opsForValue().set(key, value);}@Overridepublic String get(String key) {return stringRedisTemplate.opsForValue().get(key);}@Overridepublic boolean expire(String key, long expire) {return stringRedisTemplate.expire(key, expire, TimeUnit.SECONDS);}@Overridepublic void remove(String key) {stringRedisTemplate.delete(key);}@Overridepublic Long increment(String key, long delta) {return stringRedisTemplate.opsForValue().increment(key,delta);}
}
2.1.4redis集成完成
此时redis可以完成缓存功能的实现
3springboot集成redis应用场景
3.1用户手机注册获取验证码
- 采用session方式将验证码放入seeeion中并设置过期时间
用户注册发送验证码,然后核实对比用户注册成功
- 采用redis方式将手机号码+key放入redis缓存中,然后比对用户名和验证码
- 采用数据库存储方式,每次将验证码和用户手机号绑定,然后直接查询数据库比对验证码
3.2代码实现
3.2.1http业务请求层
@RestController
@RequestMapping("api")
public class UmsMerberController {@Autowiredprivate UserMerberService memberService;/***** 用户注册*/@ApiOperation("注册")@RequestMapping(value = "/register", method = RequestMethod.POST)@ResponseBodypublic CommonResult register(@RequestParam String telephone,@RequestParam String authCode) {return memberService.register(telephone, authCode);}/****** 获取验证码* 60秒后验证码会在redis中消失*/@RequestMapping(value = "/getAuthCode", method = RequestMethod.GET)@ResponseBodypublic CommonResult getAuthCode(@RequestParam String telephone) {return memberService.generateAuthCode(telephone);}
3.2.1业务服务处理层代码
@Service
public class UserMerberServiceImpl implements UserMerberService {/**** 注入redis模版*/@Autowiredprivate RedisService redisService;/***** 注入配置文件数据*/@Value("${redis.key.prefix.authCode}")private String REDIS_KEY_PREFIX_AUTH_CODE;//过期时间60秒@Value("${redis.key.expire.authCode}")private Long AUTH_CODE_EXPIRE_SECONDS;@Overridepublic CommonResult generateAuthCode(String telephone) {StringBuilder sb = new StringBuilder();Random random = new Random();for(int i=0;i<6;i++){sb.append(random.nextInt(10));}//验证码绑定手机号并存储到redisredisService.set(REDIS_KEY_PREFIX_AUTH_CODE+telephone,sb.toString());redisService.expire(REDIS_KEY_PREFIX_AUTH_CODE+telephone,AUTH_CODE_EXPIRE_SECONDS);return CommonResult.success(sb.toString(),"获取验证码成功");}@Overridepublic CommonResult register(String telephone, String authCode) {/***** 手机号和注册码前台用户发送*///首先比对验证码是否失效String redisauthcode= redisService.get(REDIS_KEY_PREFIX_AUTH_CODE+telephone);if(StringUtils.isEmpty(redisauthcode)){//如果未取到则过期return CommonResult.failed("验证码已失效");}if(!"".equals(redisauthcode)&&!authCode.equals(redisauthcode)){return CommonResult.failed("验证码错误");}return CommonResult.success("用户注册成功");}}
3.2.3代码测试
使用postman请求接口如下图
查看redis缓存是否存在
- 1分钟之后再次查看redis验证码缓存消失
4总结
- 技术方向springboot如何整合redis缓存技术
- 业务方向用户注册验证码功能如何实现,以及自己的实现思路
- 思维逻辑方向(比如业务注册服务层代码比对验证码是否有错误可以调整优化代码)映射java面向对象思维中的封装
同一业务可以一步完成的逻辑直接写代码,一个业务分多步完成可以封装代码。 由于用户验证码注册可以分为用户验证码判断和用户注册插入数据库2步完成故代码可以将校验验证码封装为一个方法
//对输入的验证码进行校验private boolean verifyAuthCode(String authCode, String telephone){if(StringUtils.isEmpty(authCode)){return false;}String realAuthCode = redisService.get(REDIS_KEY_PREFIX_AUTH_CODE + telephone);return authCode.equals(realAuthCode);}
5个人说明
经验是由一点一点积累的,思维也是由一天一天训练出来的。
springboot整合redis之用户手机验证码注册登录相关推荐
- Security实现手机验证码注册登录
准备工作: <!-- 导入security依赖 --> <dependency><groupId>org.springframework.boot</grou ...
- SpringBoot整合redis实现阿里云短信验证
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId ...
- SpringBoot整合Redis 之 StringRedisTemplate、RedisTemplate 基础
SpringBoot 整合 Redis 环境准备 引入依赖 配置文件 StringRedisTemplate 基本使用 Key 常用操作 String 常用操作 List 常用操作 Set 常用操作 ...
- SpringBoot整合Redis+mybatis,封装RedisUtils工具类等实战(附源码)
点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:陈彦斌 cnblogs.com/chenyanbin/ ...
- Spring Boot学习之旅:(六)springboot 整合 redis 以及 redis 通用工具类
这编文章主要介绍了springboot整合redis,以及redis配置和一些redis操作数据的工具类. 首先倒入redis依赖 一.依赖 <dependency><groupId ...
- SpringBoot系列十:SpringBoot整合Redis
From: https://www.cnblogs.com/leeSmall/p/8728231.html 声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Sprin ...
- springboot整合redis,推荐整合和使用案例(2021版)
背景:手下新人在初次使用springboot整合redis,大部分人习惯从网上检索到一份配置,然后不知其所以然的复制粘贴到项目中,网上搜索到的配置良莠不齐但又万变不离其宗.由于springboot最大 ...
- SpringBoot整合Redis - @Cacheable 和 RedisTemplate
对之前网站做了一些很简单的优化,给用户列表加了一个分页功能. 分页就更好考虑加载速度,如果换一页就要等几秒,那体验感是非常差的. 因此想到了加一个redis缓存. springboot整合redis有 ...
- SpringBoot整合redis实现简单的操作demo
SpringBoot中整合Redis 将用户频繁访问的内容存放在离用户最近,访问速度最快的地方,提高用户的响应速度,今天先来讲下在springboot中整合redis的详细步骤. 1.安装步骤 安装步 ...
最新文章
- 谈谈职业规划——CSDN对我的采访
- 全套L4自动驾驶方案降至1万美元,RoboTaxi玩家的反击开始了
- Uncaught SecurityError: Failed to execute 'replaceState' on 'History': A history state object with
- php.ini mysql扩展_PHP安装mysql.so扩展及相关PHP.ini 配置参数说明
- reducebykeyandwindow java_Spark Streaming笔记整理(三):DS的transformation与output操作
- 计算机用户注册表修改,如何通过注册表修改桌面计算机/用户文档图标
- php 上传乱码_php上传文件名乱码了怎么办
- Win10卸载新版 Edge (基于Chromium)
- 如何让win7像win10一样漂亮-win7美化
- kali安装百度网盘客户端
- Nginx配置防盗链和内核参数优化
- PLA-PEG2000-Maleimide,聚乳酸和马来西安亚楠修饰的PEG,MAL-PEG2000-PLA
- 【CSS3学习笔记】16:边框图片效果
- delphi学习笔记(2)-object pascal语言的语句 选择自 xmz2629 的 Blog
- Mysql索引有哪几种类型
- js去除url中的localtion.search部分
- 用Navicat连接MySQL的安装及配置
- コナン純黒のナイトメア20180715
- codeforces 250B Restoring IPv6
- Linux软链接的创建 删除 修改
热门文章
- Linux | buildroot使用介绍
- pl/sql Developser 的官方网站地址
- android 双电池,国外大神拆解腾讯ROG游戏手机5,双电池、中置主板结构、散热用料优秀...
- 关于自动化诊断测试(CANoe.Diva的应用)
- Cartographe纯雷达计算位姿的前后端总结
- 使用神经网络和深度学习构造围棋智能算法:实现棋盘落子编码
- 计算机公式乘法字处理,字符串乘法
- html清理超链接前面的黑点,【0基础学前端】1.2 段落文字图片超链接标签
- MATLAB Robotic System Toolbox 机械臂科氏矩阵算法
- JavaScript进阶(4)-dom查询