IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis模拟发送手机验证码 -> 正文阅读

[大数据]Redis模拟发送手机验证码

使用redis模拟验证码发送

1、需求

1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次

2、导入依赖

<!-- jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13</version>
</dependency>

总体分为三步

// 1.生成6位数字验证码
// 2.每个手机号每天只能发送三次验证码,验证码放到redis中,设置过期时间为2min
// 3、校验验证码

3、生成6位数字验证码

// 1.生成6位数字验证码
public static StringBuffer getCode() {
    StringBuffer code = new StringBuffer();
    Random random = new Random();
    for (int i=0; i<6;i++) {
        int rand = random.nextInt(10);
        code.append(rand);
    }

    return code;
}

4、设置验证码(难点)

怎么来实现验证码每天只能输入三次呢?

  1. 创建一个变量 countKey ,用来统计发送验证码的次数
  2. 计算当天的时间,距离第二天凌晨12点的秒数,设置为countKey的过期时间

计算时间差

// 获取当前时间到第二天凌晨12点的 秒 数,用来设置验证码次数的刷新时间
public Long getRefreshTime() {
    Calendar cal = Calendar.getInstance();
    // +1 获取第二天的时间
    cal.add(Calendar.DAY_OF_YEAR, 1);
    // 设置时间为 0 时 0 分 0 秒 0 毫秒
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.MILLISECOND, 0);

    // cal.getTimeInMillis(): 1970 年 1 月 1 日的 00:00:00.000到当前第二天凌晨12点的毫秒数
    // System.currentTimeMillis():1970 年 1 月 1 日的 00:00:00.000到系统当前时间的毫秒数
    return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;

}

功能实现

//2.每个手机号每天只能发送三次验证码,验证码放到redis中,设置过期时间为2min
public static void veriftCode(String phone) {
    PhoneCode phoneCode = new PhoneCode();
    //1.连接redis
    Jedis jedis = new Jedis("192.168.154.65", 6379);
    jedis.auth("123456");

    //2.拼接key
    //手机发送次数key
    String countKey = "VerifyCode" + phone + ":count";
    //验证码key
    String codeKey = "VerifyCode" + phone + ":code";

    // 每个手机每天只能发送三次
    String count = jedis.get(countKey);
    if (count == null || count == "") {
        Long refreshTime = phoneCode.getRefreshTime();
        // 该手机号当天没有申请发送验证码,系统第一次发送验证码
        jedis.setex(countKey, refreshTime, "1");
        System.out.println("第" + jedis.get(countKey) + "次" + "验证码已发送,请耐心等待");
    } else if (Integer.parseInt(count) <= 2) {
        jedis.incr(countKey);
        System.out.println("第" + jedis.get(countKey) + "次" + "验证码已发送,请耐心等待");
    } else if (Integer.parseInt(count) > 2) {
        System.out.println("今日已经发送超过三次,请明日再试");
        jedis.close();
    }

    // 获取随机生成的验证码
    String code = getCode().toString();
    // 设置验证码有效时间
    Long expireTime = (long) 2 * 60;
    jedis.setex(codeKey, expireTime, code);
    jedis.close();

}

5、校验验证码

//3、校验验证码
public static void getRedisCode(String phone, String code) {

    Jedis jedis = new Jedis("192.168.154.65", 6379);
    jedis.auth("123456");

    String codeKey = "VerifyCode" + phone + ":code";
    String redisCode = jedis.get(codeKey);
    if(code.equals(redisCode)){
        System.out.println("验证码输入正确");
    }else{
        System.out.println("验证码输入错误");
    }
    jedis.close();

}

6、测试

public static void main(String[] args) {
    // 1、模拟手机号
     veriftCode("13923459867");

    // 2、去redis中,查看验证码复制过来
    
    // 3、模拟验证码校验
    getRedisCode("13923459867", "784449");

}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:51:37  更:2021-10-08 11:54:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:40:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码