redis练习-模拟手机验证码的发送

需求

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

实现思路

在redis中设置两个字符串类型的数据:

  1. 手机号为键,验证码为值,并设置过期时间为2分钟。
  2. 手机号+当前年月日为键,次数为值。实现每日三次次数
    验证时取出redis中的验证码与自己输入的验证码对比。

实现代码

发送验证码:

/**
     * 发送验证码
     * @param phone
     */
    public static void sendCode(String phone,Jedis jedis){

        Random random = new Random();

        String timeKey = phone+new SimpleDateFormat("yyyy-MM-dd").format(new Date());

        Boolean exists = jedis.exists(timeKey);

        if (!exists){
            jedis.set(timeKey,"0");
        }

        Integer time = Integer.parseInt(jedis.get(timeKey));

        if (time >= 3){
            System.out.println("该号码每日发送验证码次数已达上限。");
            return;
        }

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < 6; i++) {
            sb.append(random.nextInt(10));
        }

        String code = sb.toString();
        time += 1;

        jedis.mset(phone,code,timeKey,time.toString());
        // 设置验证码过期时间为两分钟
        jedis.expire(phone,120);
        //
        System.out.println("您的验证码为:"+code+"、有效时间为两分钟!!!");


    }

验证验证码

    /**
     * 验证验证码
     * @param phone
     */
    public static void checkCode(String phone,Jedis jedis){


        Scanner scanner = new Scanner(System.in);
        // 获取验证码
        String code = jedis.get(phone);
        
        // 验证输入的验证码是否正确
        if (code != null){
            if (code.equals(scanner.next().trim())){
                System.out.println("验证通过!");
            }else {
                System.out.println("验证码错误!");
            }
        }else {
            System.out.println("验证码已过期!!");
        }


    }

测试:

	public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        Jedis jedis = new Jedis("XXX.XXX.XXX.XXX",6379);

        System.out.println(jedis.ping());

        sendCode("XXXXXXXX",jedis);

        checkCode("XXXXXXXX",jedis);


        jedis.close();


    }

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值