redis缓存手机验证码案例

一、发送验证码

在这里插入图片描述

二、验证码校验

在这里插入图片描述
验证码使用过后,立即删除。

三、案例源码


import redis.clients.jedis.Jedis;

import java.util.Random;

/**
 * @ClassName PhoneVerifyCode
 * @Author Lucky-Six
 * @Date 2022/10/24 16:22
 * @Version 1.0.0
 */
public class PhoneVerifyCode {

    private static Jedis jedis = new Jedis("hadoop-master", 6379);

    // 工作流程:前端点击发送验证码,
    //         后端处理请求、生成随机验证码,调用第三方api给对应手机号发送验证码。并将code写入redis
    //         当用户输入验证码、点击登录,取出redis缓存的验证码做对比、验证过后,即刻删除。

    public static void main(String[] args) {
        // 发送验证码-
        sendVerifyCode("15078963214");
        // 验证码校验-   手机号、redis中的验证码
//        verificationCode("15078963214", "136896");

    }

    /**
     * @description: 发送手机验证码
     * @author: Lucky-Six
     * @date: 2022/10/24 16:52
     * @param: [phone]
     * @return: void
     **/
    private static void sendVerifyCode(String phone) {
        //发送验证码之前,先校验。每天只能发送3次
        boolean b = verifySendCodeCount(phone + "_sendCount");
        if (b) {
            System.out.println("今天已发送三次验证码,请改天再来哦。");
            return;
        }
        //  6位验证码
        String verifyCode = generationVerifyCode();
        // 记录本次发送验证码
        jedis.incr(phone + "_sendCount");
        // 验证码,3分钟内有效
        jedis.setex(phone, 60 * 3, verifyCode);
        System.out.println("==验证码发送成功,请注意查收==");
    }

    /**
     * @description: 校验当天发送验证码次数
     * @author: Lucky-Six
     * @date: 2022/10/24 16:51
     * @param: [phone]
     * @return: boolean
     **/
    private static boolean verifySendCodeCount(String phone) {
        //  15078963214_sendCount
        String sendCount = jedis.get(phone);
        //  如果取不到,说明今天还未发送
        if (sendCount == null) {
            // 并设置改手机号发送次数,有效期1天
            jedis.setex(phone, 60 * 60 * 24, String.valueOf(0));
            return false;
        }
        return Integer.parseInt(sendCount) > 2;
    }

    /**
     * @description: 模拟验证码校验过程
     * @author: Lucky-Six
     * @date: 2022/10/24 16:51
     * @param: [phone, code]
     * @return: void
     **/
    private static void verificationCode(String phone, String code) {
        // 对比redis缓存中的验证码
        String verifyCode = jedis.get(phone);
        if (verifyCode.equals(code)) {
            System.out.println("验证码正确");
            // 验证码使用过后,马上删除。
            jedis.del(phone);
            return;
        }
        System.out.println("验证码错误");
    }

    /**
     * @description: 生成6位验证码
     * @author: Lucky-Six
     * @date: 2022/10/24 16:51
     * @param: []
     * @return: java.lang.String
     **/
    private static String generationVerifyCode() {
        Random random = new Random();
        int verifyCode = 99999 + random.nextInt(100000);
        return String.valueOf(verifyCode);
    }

}

Maven坐标:

 <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>3.2.0</version>
</dependency>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值