Redis中设置验证码
限制一分钟内最多发送5次,且每次有效时间是5分钟!
String 发送验证码(phoneNumber) {key = "shortMsg:limit:" + phoneNumber;// 设置过期时间为 1 分钟(60 秒)// 使⽤ NX,只在不存在 key 时才能设置成功bool r = Redis 执⾏命令:set key 1 ex 60 nxif (r == false) {// 说明之前设置过该⼿机的验证码了long c = Redis 执⾏命令:incr keyif (c > 5) {// 说明超过了⼀分钟 5 次的限制了// 限制发送return null;}}// 说明要么之前没有设置过⼿机的验证码;要么次数没有超过 5 次String validationCode = ⽣成随机的 6 位数的验证码();validationKey = "validation:" + phoneNumber;// 验证码 5 分钟(300 秒)内有效Redis 执⾏命令:set validationKey validationCode ex 300;// 返回验证码,随后通过⼿机短信发送给⽤⼾return validationCode ;
}
// 验证⽤⼾输⼊的验证码是否正确
bool 验证验证码(phoneNumber, validationCode) {validationKey = "validation:" + phoneNumber;String value = Redis 执⾏命令:get validationKey;if (value == null) {// 说明没有这个⼿机的验证码记录,验证失败return false;}if (value == validationCode) {return true;} else {return false;}
}
在Redis中设置验证码是一种常见且有效的安全措施,主要用于验证用户身份和防止滥用服务。以下是如何在Redis中有效地设置和管理验证码的详细步骤:
- 生成验证码
- 生成方式:通常使用随机算法生成一个固定长度(如4位或6位)的数字或字母组合作为验证码。例如,可以使用Java中的
Random类生成一个6位数的验证码。 - 代码示例
public static String getCode(){Random random = new Random();String code = "";for (int i = 0; i < 6; i++) {int rand = random.nextInt(10);code += rand;}return code; }
- 生成方式:通常使用随机算法生成一个固定长度(如4位或6位)的数字或字母组合作为验证码。例如,可以使用Java中的
- 存储验证码
- Redis命令:使用
SET命令将生成的验证码存储在Redis中,键名通常为“手机号_验证码”,值为验证码字符串本身。同时,为了确保验证码只在一段时间内有效(如1分钟或2分钟),需要使用EXPIRE命令设置验证码的过期时间。 - 代码示例
String ip = req.getRemoteAddr(); String yzm = this.getYzm(); ValueOperations forValue = rt.opsForValue(); forValue.set(ip+"_yzm", yzm); rt.expire(ip+"_yzm", 60*1000);
- Redis命令:使用
- 发送验证码
- 发送途径:通过短信网关API发送验证码到用户手机,这通常需要集成第三方短信服务商提供的SDK或API。发送完成后,用户手机会收到一条包含验证码的短信。
- 注意事项
- 安全性:确保在发送验证码之前进行必要的验证,如检查手机号格式是否正确,以及是否在短期内重复发送请求。这可以通过在Redis中另外存储发送次数来实现。
- 限流:为了防止恶意攻击,可以限制每个手机号在一定时间内只能发送有限次数的验证码。具体实现时,可以在Redis中用另一个键记录发送次数,每次发送增加计数器,并检查是否超过限制。
- 校验验证码
- 验证流程:用户在界面输入收到的验证码后,系统从Redis中取出与该手机号关联的验证码进行比对。如果一致且未过期,则验证通过;否则,提示验证码错误或已过期。
- 代码示例
public static void getRedisCode(String phone, String code){Jedis jedis = new Jedis("host", 6380);jedis.auth("密码");String codeKey = "VerifyCode" + phone + ":code";String s = jedis.get(codeKey);if (code.equals(s)){System.out.println("验证成功");} else {System.out.println("失败");} }
- 管理验证码
- 超时处理:由于每个验证码都有有效期,因此需确保过期的验证码能够及时从Redis中清除,以避免数据堆积。通过合理设置Redis的过期时间自动清理机制,可以实现这一点。
- 性能优化:在高并发场景下,使用Redis集群来分散读写压力,提高验证码的存取效率。
综上所述,通过上述步骤,可以在Redis中有效地设置和管理验证码,以增强系统的安全性和用户体验。在实际应用中,根据具体需求调整细节,可以达到更好的效果。
相关文章:
Redis中设置验证码
限制一分钟内最多发送5次,且每次有效时间是5分钟! String 发送验证码(phoneNumber) {key "shortMsg:limit:" phoneNumber;// 设置过期时间为 1 分钟(60 秒)// 使⽤ NX,只在不存在 key 时才能设置成功bool…...
使用hadoop进行数据分析
Hadoop是一个开源框架,它允许分布式处理大数据集群上的大量数据。Hadoop由两个主要部分组成:HDFS(Hadoop分布式文件系统)和MapReduce。以下是使用Hadoop进行数据分析的基本步骤: 数据准备: 将数据存储在HDF…...
架构师篇-7、企业安全架构设计及实践
摘要: 认识企业安全架构企业安全案例分析及实践 内容: 为什么做企业安全架构怎么做好安全架构设计案例实践分析&随堂练 为什么要做企业安全架构 安全是麻烦制造者? 整天提安全需求增加开发工作增加运维要求增加不确定性延后业务上线…...
递归算法~快速排序、归并排序
递归排序是一种基于分治法的排序算法,最典型的例子就是快速排序和归并排序。这两种算法都利用递归将问题分解成更小的子问题,然后将子问题的解合并以得到原始问题的解。 1、快速排序(Quick Sort) 快速排序的基本思想是选择一个基…...
DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手
关于DarkGPT DarkGPT是一款功能强大的人工智能安全助手,该工具基于GPT-4-200k设计并实现其功能,可以帮助广大研究人员针对泄露数据库进行安全分析和数据查询相关的OSINT操作。 工具要求 openai1.13.3 requests python-dotenv pydantic1.10.12 工具安装 …...
RAG 检索增强生成有效评估
我们将介绍RAG(检索增强生成)的评估工作流程 RAG工作流程的部分 数据集 这里是我们将要使用的LCEL (LangChain Expression Language)相关问题的数据集。 这个数据集是在LangSmith UI中使用csv上传创建的: https://smith.langchain.com/public/730d833b-74da-43e2-a614-4e2ca…...
Day38:LeedCode 1049. 最后一块石头的重量 II 494. 目标和 474.一和零
1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x < y。那么粉碎的可能结果…...
sqlalchemy分页查询
sqlalchemy分页查询 在SQLAlchemy中,可以使用limit和offset方法实现分页查询 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import MyModel # 假设MyModel是你定义的模型# 连接数据库 engine = create_engine(sqlite:///myd…...
Java--常用类APl(复习总结)
前言: Java是一种强大而灵活的编程语言,具有广泛的应用范围,从桌面应用程序到企业级应用程序都能够使用Java进行开发。在Java的编程过程中,使用标准类库是非常重要的,因为标准类库提供了丰富的类和API,可以简化开发过…...
【股指期权投教】一手股指期权大概多少钱?
一手股指期权的权利金大概在几千人民币左右,如果是作为期权卖方还需要另外缴纳保证金的。国内的股指期权有三种,沪深300、上证50、中证1000股指期权,每点合约人民币100 元。 期权合约的价值计算可以通过此公式得出:权利金的支付或…...
mmap()函数和munmap()函数的例子
代码: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #include <string.h> #include <stdio.h> #include <unistd.h>#define FILELENGTH 80 int main(void) {int fd-1;char …...
计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)
计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1) flyfish 链式法则在深度学习中的主要应用是在反向传播(backpropagation)算法中。 从简单的开始 ,文本说的就是链式法则 R …...
VUE实现简易购物车
主要是对基础的指令的使用,直接上代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…...
混沌工程——从捣乱的视角看系统稳定性
概念 混沌工程是通过捣乱实验探究系统稳定性的实践过程,其作战武器是风险因子,即在健康的运行环境中引入风险变量来验证系统对风险的抵抗能力,它的作用是推动系统容错能力建设、验证监控告警及时性、提升研发问题排查能力。 混沌工程的工作…...
Windows宝塔面板部署ThinkPHP8.0创建Vue项目案例
安装ThinkPHP8.0 登录宝塔面板,创建一个站点。 输入composer代码,执行完成后自动创建TP目录 composer create-project topthink/think tp 网站目录设置为tp,运行目录设置为public 设置PHP版本为8.0以上,不然会出现下面的报错代…...
5G频段简介
5G频段 5G网络一共有29个频段,主要被分为两个频谱范围,其中6GHz以下的频段共有26个(统称为Sub6GHz),毫米波频段有3个。目前国内主要使用的是Sub6GHz,包括n1/n3/n28/n41/n77/n78/n79共7个频段。具体介绍如下…...
【python学习】bytearray 数组
在Python中,bytearray 是一个可变序列,用于表示一个字节数组。与不可变的 bytes 类型相比,bytearray 允许你修改其内容。你可以通过索引来访问和修改 bytearray 中的元素,也可以添加或删除元素。 使用 bytearray 的一些示例&…...
Labview_Occurrencel(事件发生)
PS:这里遇到 一个很Low的事情: 在停止第二个while循环的时候出现了停止不了的情况。因为等待事件发生设置的超时时间为:-1。所以等事件发生后出现了条件接线端已经执行的情况,所以当下次事件发生时未能及时停止。初版的停止设置如下图&#x…...
天气网站爬虫及可视化
摘要:随着互联网的快速发展,人们对天气信息的需求也越来越高。本论文基于Python语言,设计并实现了一个天气网站爬虫及可视化系统。该系统通过网络爬虫技术从多个天气网站上获取实时的天气数据,并将数据进行清洗和存储。同时&#…...
【python - 数据】
一、序列 序列(sequence)是一组有顺序的值的集合,是计算机科学中的一个强大且基本的抽象概念。序列并不是特定内置类型或抽象数据表示的实例,而是一个包含不同类型数据间共享行为的集合。也就是说,序列有很多种类&…...
STM32串口通信实战指南与常见问题解析
1. 串口通信基础概念解析串口通信作为嵌入式系统中最基础也最常用的通信方式之一,其核心原理是通过单根数据线按位顺序传输数据。与并行通信相比,虽然传输速率较低,但具有布线简单、成本低廉、传输距离远等显著优势。在实际工程应用中&#x…...
门店做小程序失败的常见原因有哪些?
门店做小程序失败的常见原因有哪些?在实际经营中,越来越多门店开始尝试通过小程序实现线上转型,但上线后效果不佳甚至放弃运营的情况也较为常见。门店做小程序失败的常见原因,本质上并不在于工具本身,而在于经营逻辑、…...
Performance-Fish:环世界性能优化的全方位解决方案
Performance-Fish:环世界性能优化的全方位解决方案 【免费下载链接】Performance-Fish Performance Mod for RimWorld 项目地址: https://gitcode.com/gh_mirrors/pe/Performance-Fish 问题诊断:环世界性能瓶颈深度剖析 🔍 AI决策系统…...
从三角函数到雷达滤波:三角窗的DSP实现与性能测试全记录
从三角函数到雷达滤波:三角窗的DSP实现与性能测试全记录 1. 三角窗的数学本质与信号处理价值 在数字信号处理领域,窗函数就像是一位精密的调音师,能够对原始信号进行细致的修饰和调整。三角窗作为其中最基础却又最富特色的成员之一࿰…...
人脸识别OOD模型在金融领域的身份验证应用
人脸识别OOD模型在金融领域的身份验证应用 1. 引言 想象一下这样的场景:一位银行客户正在通过手机APP进行大额转账,系统需要快速准确地确认他的身份。传统的人脸识别系统可能会因为光线不佳、佩戴口罩或者图像模糊而无法正常工作,甚至可能被…...
Kimi-VL-A3B-Thinking效果展示:MMLongBench-Doc 35.1分超长文档理解
Kimi-VL-A3B-Thinking效果展示:MMLongBench-Doc 35.1分超长文档理解 1. 模型概述 Kimi-VL-A3B-Thinking是一款创新的开源混合专家(MoE)视觉语言模型,在多模态理解和长上下文处理方面展现出卓越能力。这个模型最引人注目的特点是…...
别再买错千元投影! 哈趣Q1Pro藏看越级体验
当下的智能投影市场正经历着深度的“去伪存真”变革,行业洗牌加速的同时,也让消费者的选购变得愈发谨慎。洛图科技数据显示,2025年国内智能投影市场整体销量下滑,其中低端投影成为调整重灾区,0-499元价位段销量同比大跌…...
【喜报】义翘神州再获CNAS认可,全面对标2025版药典新标准
义翘神州生物安全检测实验室近日成功通过中国合格评定国家认可委员会(CNAS)的扩项评审及定期监督评审,并已完成全部能力附表更新!这标志着实验室技术能力与质量管理体系持续符合ISO/IEC 17025:2017国际标准的严苛要求,…...
Shell脚本编程与自动化运维了解006
一、Shell脚本基础1.1 Bash脚本概述Shell脚本是一种解释型编程语言,用于自动化Linux系统管理任务。Bash(Bourne Again SHell)是Linux系统中最常用的Shell解释器。脚本基本结构图#!/bin/bash # 这是一个注释 echo "Hello, World!"关…...
单片机存储系统:哈佛架构与ROM/RAM技术解析
1. 单片机存储系统概述单片机作为微型计算机系统的核心,其存储架构直接决定了系统的性能和功能实现方式。与通用计算机不同,单片机的存储系统通常采用哈佛结构,将程序存储器和数据存储器物理分离。这种设计源于早期计算机科学家对处理器效率的…...
