Redis6学习笔记【part4】Jedis-API与手机验证码功能实现

本文介绍了如何配置Redis以允许外网访问,并使用Java的Jedis库进行连接和测试。接着展示了Jedis对Redis中的Key、String、List、Set、Hash和Zset等数据类型的API操作。最后,文章详细讲解了利用Redis和Jedis实现手机验证码功能的完整流程,包括验证码生成、发送限制和验证过程。
摘要由CSDN通过智能技术生成

1.连接 Jedis

第一步,修改 redis 的配置,以允许外网 ip 访问 redis。

在 redis.conf 中注释掉 bind 127.0.0.1 ,并修改 protected-mode no 。

第二步,导入依赖。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.2.0</version>
</dependency>

第三步,创建测试程序,测试连通性。

    @Test
    public void jedis_test(){
        Jedis jedis = new Jedis("hadoop100",6379);
        String pong = jedis.ping();
        System.out.println(pong);
        jedis.close();
    }

	//返回 PONG,代表成功连通。

注:记得禁用 Linux 的防火墙,否则 ping不通。在 Linux(CentOS7) 里执行命令systemctl stop firewalld.servicesystemctl disable firewalld.service


2.用 Jedis-API 操作相关数据类型

① Key

    @Test
    public void test_String(){
        Jedis jedis = new Jedis("hadoop100",6379);
        //获取key对应的值
        System.out.println(jedis.get("k1"));
        //获取所有key
        Set<String> keys = jedis.keys("*");
        //输出key的数量
        System.out.println(keys.size());
        //判断key存不存在
        System.out.println(jedis.exists("k1"));
        //获取key的ttl值
        System.out.println(jedis.ttl("k1"));
     }

② String

    @Test
    public void test_String(){
        Jedis jedis = new Jedis("hadoop100",6379);
        //一次放一个
        jedis.set("k1","v1");
        jedis.set("k2","v2");
        jedis.set("k3","v3");

        //一次放多个
        jedis.mset("str1","v1","str2","v2","str3","v3");
        //批量获取key对应的值
        System.out.println(jedis.mget("str1","str2","str3"));
    }

③ List

    @Test
    public void test_List(){
        Jedis jedis = new Jedis("hadoop100",6379);
        //放入list类型的键值对,一个键可以放入多个值
        jedis.lpush("list","v1","v2","v3","v4");
        //获取list的全部值
        List<String> list = jedis.lrange("list", 0, -1);
        for (String str : list) {
            System.out.println(str);
        }
    }

④ Set

    @Test
    public void test_Set(){
        Jedis jedis = new Jedis("hadoop100",6379);
        //将一个或多个 member 元素加入到集合 key 中
        jedis.sadd("orders","order01");
        jedis.sadd("orders","order02");
        jedis.sadd("orders","order03");
        jedis.sadd("orders","order04");
        //取出该集合的所有值
        Set<String> smembers = jedis.smembers("orders");
        for (String order : smembers) {
            System.out.println(order);
        }
        //删除集合中的某个元素
        jedis.srem("orders","order04");

    }

⑤ Hash

    @Test
    public void test_Hash(){
        Jedis jedis = new Jedis("hadoop100",6379);
        //给集合中的键赋值
        jedis.hset("hash1","userName","parker");
        //从集合取出value
        System.out.println(jedis.hget("hash1","userName"));

        //用map来给集合中的键赋值
        Map<String,String> map = new HashMap<>();
        map.put("name","parker");
        map.put("number","7");
        map.put("age","20");
        jedis.hmset("hash2",map);
        //以map形式从集合取出value
        List<String> result = jedis.hmget("hash2", "name", "number");
        for (String element : result) {
            System.out.println(element);
        }
    }

⑥ Zset

    @Test
    public void test_Zset(){
        Jedis jedis = new Jedis("hadoop100",6379);
        //将一个或多个 member 元素及其 score 值加入到有序集 key 当中
        jedis.zadd("animalSet",100d,"pig");
        jedis.zadd("animalSet",200d,"dog");
        jedis.zadd("animalSet",300d,"cat");
        jedis.zadd("animalSet",500d,"rabbit");
        //获取key对应有序集合的所有值
        Set<String> animals = jedis.zrange("animalSet", 0, -1);
        for (String animal : animals) {
            System.out.println(animal);
        }
    }

3.Redis + Jedis 实现手机验证码功能

需求分析:

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

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

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

代码实现:

第一步,生成一个6位数字码。

    //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;
    }a

第二步,发送验证码。

    //2.每个手机每天只能发送三次,验证码放入redis中,并设置过期时间
    public static void sendCode(String phone){
        //连接redis
        Jedis jedis = new Jedis("hadoop100",6379);

        //创建key
        //①手机发送次数key
        String countKey = "PhoneCode"+phone+":count";
        //②验证码key
        String codeKey = "PhoneCode"+phone+":code";

        //每个手机每天只能发送三次
        String count = jedis.get(countKey);
        if(count == null){  //没有发送次数,第一次发送
            //设置发送次数为1
            jedis.set(countKey,"1");
        }else if(Integer.parseInt(count) <= 2){
            //发送次数+1
            jedis.incr(countKey);
        }else if(Integer.parseInt(count) > 2){
            //发送满3次,不能再发送
            System.out.println("今天发送次数已经超过三次,不能再发送");
            //关闭redis
            jedis.close();
            return;
        }

        //发送验证码并放到redis里
        String vcode = getCode();
        jedis.setex(codeKey,60*60*24,vcode);
        jedis.close();

        System.out.println("成功发送");
    }

第三步,校验验证码。

    //3.验证码校验
    public static void verifyCode(String phone,String code){
        //从redis获取验证码
        Jedis jedis = new Jedis("hadoop100",6379);

        //创建手机发送次数key
        String codeKey = "PhoneCode"+phone+":code:";
        String redisCode = jedis.get(codeKey);
        if(redisCode.equals(codeKey)){
            System.out.println("验证成功");
        }else {
            System.out.println("验证失败");
        }
    }

第四步,模拟发送手机验证码。

public class PhoneCode {
    public static void main(String[] args) {
        //模拟验证码发送
        sendCode("13812345678");
        sendCode("13812345678");
        sendCode("13812345678");
        sendCode("13812345678");
    }
}

打印结果如下:

成功发送
成功发送
成功发送
今天发送次数已经超过三次,不能再发送

查看 redis,可以知道验证码为387393。

在这里插入图片描述

第五步,模拟校验验证码。

public class PhoneCode {
    public static void main(String[] args) {
        //模拟校验验证码
        verifyCode("13812345678","387393");
        verifyCode("13812345678","387396");
    }
}

打印结果如下

验证成功
验证失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Parker7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值