Redis(十六)-Jedis案例-模拟验证码发送

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 本次模拟验证码发送的需求有三项:输入手机号,点击发送后随机生成6位数字验证码,2分钟有效输入验证码,点击验证,返回成功或失败每个手机号每天只能输入3次

简介

本次模拟验证码发送的需求有三项:

输入手机号,点击发送后随机生成6位数字验证码,2分钟有效

输入验证码,点击验证,返回成功或失败

每个手机号每天只能输入3次

代码编写

利用Random函数生成6位随机数

public String generateCode() {
        StringBuilder code = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            int nextInt = new Random().nextInt(10);
            code.append(nextInt);
        }
        return code.toString();
    }

输入手机号,获取验证码并将验证码存放到Redis中。同时,还需要校验验证码的发送是否超过限制。

public String setCode(String phone) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        String code = generateCode();
        String key = "code:" + phone;
        String code_count = "code:" + phone + ":count";
        String count = jedis.get(code_count);
        if (count == null) {
            //第一次设置
            jedis.setex(code_count, 24 * 60 * 60L, "1");
        } else if (Integer.valueOf(count) <= 2) {
          //验证码的次数+1
            jedis.incr(code_count);
        } else {
            System.out.println("每个手机号每天只能输入3次");
            return "每个手机号每天只能输入3次";
        }
        jedis.setex(key,2*60L, code);
        return code;
    }

这里通过设置键 "code:" + phone + ":count" 来统计每个手机号每天发送的次数,此处采用的是setex方法进行设置,设置的键是"code:" + phone , 设置的过期时间是1天,即24 * 60 * 60L秒,设置的值是"1"。

第一次设置时值count为空,需要手动设置,后面再次设置时就能获取到值了,通过incr 方法对验证码的次数进行+1操作。直到值count大于3时,则给出提示:每个手机号每天只能输入3次。

3. 设置生成的随机验证码,键是"code:" + phone,值是生成的code,过期时间是2分钟,即2*60L秒。

验证用户输入的验证码

验证用户输入的验证码就是将用户输入的验证码和Redis中保存的验证码做一个对比。如果两者一样的话则表示验证成功,否则表示验证失败。

public boolean verifyCode(String phone, String code) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        String redis_code = jedis.get("code:" + phone);
        if (redis_code != null && code.equals(redis_code)) {
            System.out.println("验证码验证成功");
            return true;
        }
        System.out.println("验证码验证失败");
        return false;
    }

如果redis_code为空,则表示验证码已经过期,故不能在使用,如果Redis中保存的验证码redis_code和用户输入的验证码code相等则表示验证码验证成功。

总结

本文通过模拟实际场景中的验证码发送需求重温了一遍Jedis的使用,希望对读者朋友们有所帮助。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
JavaScript NoSQL Redis
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
这篇文章记录了在Vue中实现修改手机号和邮箱的大致流程,包括使用过滤器部分隐藏展示的手机号和邮箱,以及通过点击触发路由跳转的便捷方式。文章还描述了旧号码和新号码验证的界面实现,其中验证码由后端生成并通过弹窗展示给用户,未来可以接入真正的手机验证码接口。此外,还提供了修改邮箱的页面效果截图,并强调了学习是一个永无止境的过程。
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
|
3天前
|
数据采集 自然语言处理 API
Python反爬案例——验证码的识别
Python反爬案例——验证码的识别
11 2
|
7天前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
9 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
22天前
|
NoSQL 网络协议 Java
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
29 7
|
23天前
|
NoSQL Java 网络安全
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
|
18天前
|
JSON NoSQL Java
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
|
21天前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
30 2
|
1天前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
12 0
|
2月前
|
NoSQL Java Linux
Jedis测试redis。(redis在linux虚拟机中)
该博客文章提供了使用Jedis客户端连接Linux虚拟机中的Redis服务器的步骤,包括Maven依赖配置、测试用例编写以及测试结果的截图。
|
2月前
|
存储 NoSQL Java
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
该博客文章展示了如何在Linux虚拟机上使用Redis和Jedis客户端实现手机验证码的验证功能,包括验证码的生成、存储、验证以及限制每天发送次数的逻辑,并提供了测试结果截图。
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)