admin管理员组

文章数量:1037775

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

共享会话

实现思路

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


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

image.png|383

手机验证码

实现思路

  1. 生成验证码
    • 用户输入手机号
    • 点击获取验证码(限制:1min 之内,最多获取 5 次)
  2. 检查验证码
    • 把短信收到的验证码这一串数,提交到系统中,验证是否正确

伪代码实现

生成验证码
代码语言:javascript代码运行次数:0运行复制
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;
}
验证验证码
代码语言:javascript代码运行次数:0运行复制
// 验证用户输入的验证码是否正确
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 来实现的(第三方提供的短信平台服务)(充值)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-11,如有侵权请联系 cloudcommunity@tencent 删除redis服务器手机短信验证码

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

共享会话

实现思路

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


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

image.png|383

手机验证码

实现思路

  1. 生成验证码
    • 用户输入手机号
    • 点击获取验证码(限制:1min 之内,最多获取 5 次)
  2. 检查验证码
    • 把短信收到的验证码这一串数,提交到系统中,验证是否正确

伪代码实现

生成验证码
代码语言:javascript代码运行次数:0运行复制
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;
}
验证验证码
代码语言:javascript代码运行次数:0运行复制
// 验证用户输入的验证码是否正确
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 来实现的(第三方提供的短信平台服务)(充值)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-11,如有侵权请联系 cloudcommunity@tencent 删除redis服务器手机短信验证码

本文标签: redis应用场景共享会话和手机验证码