【Redis】模拟手机验证码案例:Jedis使用、get、hget、hincrBy、setex、生成6位随机数工具

简单实验,没有考虑并发

一、案例要求

  1. 根据手机号生成6位验证码,2分钟有效。且2分钟之内不可再次生成验证码。

  2. 每个手机号每天只能输入3次。

二、实验环境准备

2.1 修改redis网络配置

修改redis配置文件,redis.conf

  • 注释掉:bind 127.0.0.1
  • 解开注释:requirepass 密码

2.2 关闭防火墙或打开redis端口号

  • 关闭防火墙:systemctl stop firewalld
  • 开通redis端口号:firewall-cmd --zone=public --add-port=6739/tcp --permanent

2.3 相关依赖导入

<!--        生成随机数工具包-->
<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.7</version>
</dependency>
<!--        jedis-->
<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.3.0</version>
</dependency>

三、具体实现

3.1 成员变量

Jedis jedis=new Jedis("192.168.100.103",6379);
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");

3.2 生成验证码

//生成验证码并输出
    public void getCode(String phone){
        try
        {
            jedis.auth("123456");
            //1.判断手机号2分钟内是否已发送验证码:phone:String 存在验证码
            String hasCode = jedis.get(phone);
            if(hasCode!=null){
                System.out.println("发送验证码繁忙,请两分钟后再试!");
                return;
            }
            //2.判断该手机号今天发送次数是否超过3次:yyyy-MM-dd-code:map 存储今天验证码发送次数
            String isOut = jedis.hget(simpleDateFormat.format(new Date()) + "-code", phone);
            if(isOut!=null && isOut.equals("3")){
                System.out.println("发送验证码频繁,请明天再试!");
                return;
            }
            //3.该手机号发送次数加1。(有需要可判断该key是否存在,不存在则设置过期时间为一天。)
            jedis.hincrBy(simpleDateFormat.format(new Date()) + "-code",phone,1);
            //4.随机生成6位验证码,设置过期时间为2分钟
            String random = RandomStringUtils.randomNumeric(6);
            jedis.setex(phone,120,random);
            System.out.println(phone+"的验证码为:"+random);
        }finally {
            jedis.close();
        }
    }

3.3 验证

public void testCode(String phone,String code){
        try{
            jedis.auth("123456");
            //1.通过手机号获得验证码:phone:String
            String s = jedis.get(phone);
            //2.判断验证码是否正确
            if(code.equals(s)){
                System.out.println("验证成功!");
                return;
            }
            System.out.println("验证失败!");
        }finally {
            jedis.close();
        }
    }

四、测试

代码

@Test
public void demo1(){
    getCode("1111");
}
@Test
public void demo2(){
    testCode("1111","706526");
}

输出

1111的验证码为:706526
验证成功!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿你满腹经纶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值