第8章 Redis_Jedis_实例

8.1 完成一个手机验证码功能

要求:

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

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

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

 

复制代码
package com.sun.jedis;

import redis.clients.jedis.Jedis;
import java.util.Random;

/**
 * 手机验证码功能:
 * 每天每个手机号只能发送三次验证码,验证码有效期为2分钟,验证码为6位数字
 */
public class PhoneCode {

    public static void main(String[] args) {
        //1.设置redis的key:每天每个手机号只能发送三次验证码,验证码有效期为2分钟
        setEx("13894513251");
        //2.校验redis验证码是否与用户输入的相同
//        verifyCode("13894513251","877177");
    }

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

    //2.设置redis的key:每天每个手机号只能发送三次验证码,验证码有效期为2分钟
    public static void setEx(String phone) {
        //连接redis
        Jedis jedis = new Jedis("IP地址",6379);

        //手机发送次数key
        String phoneKey = "verifyCode:"+phone+":count";
        //验证码key
        String codeKey =  "verifyCode:"+phone+":code";

        //每个手机每天只能发送三次
        String count = jedis.get(phoneKey);
        if(count == null){
            //没有发送过,第一次发送
            jedis.setex(phoneKey,24*60*60,"1");
        }else if(Integer.parseInt(count) <= 2){
            //未达到三次,加1
            jedis.incrBy(phoneKey,1);
        }else if(Integer.parseInt(count) > 2){
            //达到三次,不能再发送
            System.out.println("今天发送次数已经超过三次");
            jedis.close();
            return;
        }

        //验证码有效期为2分钟
        String vcode = getCode();
        jedis.setex(codeKey,120,vcode);
        jedis.close();
    }

    //3.校验redis验证码是否与用户输入的相同
    public static void verifyCode(String phone, String code){
        //连接redis
        Jedis jedis = new Jedis("IP地址",6379);
        //从redis中获取验证码
        String codeKey =  "verifyCode:"+phone+":code";
        String verifyCode = jedis.get(codeKey);
        if(verifyCode.equals(code)) {
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
        jedis.close();
    }

}
复制代码

 

posted @   狂热搬砖家  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示