Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

REDIS pubsub — Redis中国用户组(CRUG)

什么是发布和订阅

Redis发布订阅是一种通信模式:发送者(Pub)发送消息,订阅者(Sub)接收消息。Redis客户端可以订阅任意数量的频道。

在命令行中实现

Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送

Jedis 4.3.1 操作Java

<dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>4.3.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>

JDK版本是17,Linux系统是Ubuntu18.04。redis远程访问相关的配置在安装时就弄好了(主要是注释掉bind ip和protected-mode设置成no)。

IP地址注意不要设置错,要找自己linux服务器的ip。

先去看看防火墙,开了的话就得设置redis端口可以访问。子服务器不开防火墙无所谓,远程服务器的话参考这个:Ubuntu系统中防火墙的使用和开放端口_Aaron_Run的博客-CSDN博客_ubuntu开放端口命令

Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送

再ping一下子系统的ip

Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送

代码:

这是junit5的方式,不喜欢的话也可以直接改改放到main函数运行也行。

public class JedisDemo1 {
    static Jedis resource = null;
    @BeforeAll
    static void Link(){
        JedisPool pool = new JedisPool("172.19.189.116", 6379);
        resource = pool.getResource();
        resource.auth("123456");
    }
    @Test
    void StringsTest() {
        String ping = resource.ping();
        System.out.println(ping);
        resource.set("jedis","2023");
        Set<String> keys = resource.keys("*");
        for(String key : keys){
            String value = resource.get(key);
            System.out.println(key + ": " + value);
        }
    }
}

Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送

 

 

 

 

 

红字只是警告,就算是按照slf4j上的要求(SLF4J Error Codes)加了一个包,还是有时候出有时候不出的。暂时就不管它。

Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送

 

 

操作没什么好说的,在redis窗口怎么操作,jedis一般都有相关命令。

手机验证码案例

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

就是说输入手机号提交后,在redis里面set键值对,key是手机号,value是随机6位数字码,过期时间2分钟

验证就get了,然后设置每天只能输入3次,可以在前端设置。但是根据前端不可靠,后端也要做出限制。

最直接的就是多用一个string就行。输入次数通过incr改,而时间则设置成它的过期时间。

Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送

 

 

参考代码如下,

    // 验证
    public static void verifyCode(String phoneNumber, String code){
        String key = jedis.get(phoneNumber + ":code");
        if(key.equalsIgnoreCase(code)){
            System.out.println("通过验证");
        } else {
            jedis.incr(phoneNumber+":counts");
            System.out.println("验证失败,今日还剩" + jedis.get(phoneNumber+":counts") + "次。");
        }
    }

    // 设置验证码,且每个手机每天只能验证三次
    public static void getRedisCode(String phoneNumber){
        String codeKeys = phoneNumber + ":code";
        String countKeys = phoneNumber + ":counts";
        String count = jedis.get(countKeys);
        if(count == null){
            // 没发送过
            jedis.setex(codeKeys,2*60,getCode());
            jedis.setex(countKeys, 24*60*60, "1");
        } else if(Integer.parseInt(count) <= 2){
            jedis.incr(countKeys);
        } else if(Integer.parseInt(count) > 2){
            //超过三次了
            System.out.println("今日已经超过3次");
        }
    }

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/199812.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!