当前位置: 首页 > news >正文

【redis】应用场景:共享会话和手机验证码

文章目录

  • 共享会话
    • 实现思路
  • 手机验证码
    • 实现思路
    • 伪代码实现
      • 生成验证码
      • 验证验证码

共享会话

实现思路

如果每个应用服务器,维护自己的会话数据,此时彼此之间胡共享,用户请求访问到不同的服务器上,就可能会出现一些不能正确处理的情况了
image.png|371


为了解决这个问题,可以使用 Redis 将用户的 Session 信息进行几种管理,在这种模式下,只要保证 Redis 是最高可用和可扩展性的,无论用户被均衡到哪台 Web 服务器上,都集中从 Redis 中查询、更新 Session 信息!image.png|383

手机验证码

实现思路

  1. 生成验证码

    • 用户输入手机号
    • 点击获取验证码(限制:1min 之内,最多获取 5 次)
  2. 检查验证码

    • 把短信收到的验证码这一串数,提交到系统中,验证是否正确

伪代码实现

生成验证码

String 发送验证码(phoneNumber) {
	key = "shortMsg:limit:" + phoneNumber;
	// 设置过期时间为 1 min
	//使用 NX,只在不存在 key 时才能设置成功
	bool r = Redis 执行命令: set key 1 ex 60 nx
	if (r == false) {
		// 说明之前设置过该手机的验证码了
		long c = Redis 执行命令: incr key
		if (c > 5) {
			// 说明超过一分钟 5 次的限制了
			// 限制发送
			return null;
		}
	}
	
	// 说明要么之前没有设置过手机验证码;要么次数没有超过 5 次
	String validationCode = 生成随机的 6 位数的验证码();
	
	validationKey = "validation:" + phoneNumber;
	// 验证码 5 分钟内有效
	Redis 执行命令: set validationKey validationCode ex 300;
	
	// 返回验证码
	return vaildation;
}


验证验证码

// 验证用户输入的验证码是否正确
bool 验证验证码(phoneNumber, vaildation) {
	vaildationKey = "vaildation:" + phoneNumber;
	
	String value = Redis 执行命令: get vaildationKey;
	if (value == null) {
		// 说明没有这个手机验证码记录,验证失败
		return false;
	}
	
	if (value == vaildationCode) {
		retrurn true;
	} else {
		return false;
	}
}

像发送短信这样的操作,都是有专门的 SDK 来实现的(第三方提供的短信平台服务)(充值)

http://www.dtcms.com/a/62673.html

相关文章:

  • Quickwit+Jaeger+Prometheus+Grafana搭建Java日志管理平台
  • 使用AI一步一步实现若依前端(7)
  • Flutter 基础组件 Text 详解
  • 工作记录 2017-01-05
  • 算法面试题深度解析:LeetCode 2012.数组元素的美丽值求和计算与多方案对比
  • 【深度学习】读写文件
  • LiveGBS流媒体平台GB/T28181常见问题-视频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验
  • Web开发-PHP应用TP框架MVC模型路由访问模版渲染安全写法版本漏洞
  • echarts geo3D地图标记点自定义照片
  • Android StrictMode 使用与原理深度解析
  • Android : Camera之CHI API
  • DeFi基石ERC4626标准实现一个金库合约
  • [GHCTF 2025](>﹏<)
  • Manus AI:多语言手写识别的技术革命与未来图景
  • Java 大视界 -- Java 大数据在智能医疗药品研发数据分析与决策支持中的应用(126)
  • linux下的网络抓包(tcpdump)介绍
  • 网络基础概述2
  • 入门到入土,Java学习 day16(算法1)
  • 【2025】AWVS安装保姆级教程(最新25.1.2可用)
  • HEC-HMS水文建模全解析:气候变化与极端水文、离散化流域单元‌精准刻画地表径流、基流与河道演进过程‌
  • STM32全系大阅兵(2)
  • 七层协议攻防实战:从HTTP慢速攻击到DNS隧道检测
  • Cursor新版0.47.x发布
  • 大语言模型基础—语言模型的发展历程--task1
  • CUDA error: fatal error: cuda/std/utility: No such file or directory #include
  • 【MySQL是怎么运行的】三、事务
  • 密立根油滴仪测油滴电荷数据计算 Python实现
  • [算法] 结点K个一组的链表反转(hard)
  • 深入解析 TCP 协议【真题】
  • js-对象浅拷贝和深拷贝( B复制A,看B的值对比:都变为浅,一变一不变为深)