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

举报
码农飞哥 发表于 2022/05/02 00:45:14 2022/05/02
【摘要】 您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 ❤️ 2. Python爬虫...

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
❤️ 2. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
😁 5. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
全网同名【码农飞哥】欢迎关注,个人VX: wei158556

简介

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

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

代码编写

  1. 利用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();
    }
  1. 输入手机号,获取验证码并将验证码存放到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的使用,希望对读者朋友们有所帮助。

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/124522676

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。