Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送
REDIS pubsub -- Redis中国用户组(CRUG)
什么是发布和订阅
Redis发布订阅是一种通信模式:发送者(Pub)发送消息,订阅者(Sub)接收消息。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开放端口命令

再ping一下子系统的ip

代码:
这是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);
}
}
}

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

操作没什么好说的,在redis窗口怎么操作,jedis一般都有相关命令。
手机验证码案例
要求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效,
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
就是说输入手机号提交后,在redis里面set键值对,key是手机号,value是随机6位数字码,过期时间2分钟
验证就get了,然后设置每天只能输入3次,可以在前端设置。但是根据前端不可靠,后端也要做出限制。
最直接的就是多用一个string就行。输入次数通过incr改,而时间则设置成它的过期时间。

参考代码如下,
// 验证
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;
}
Redis 6 学习笔记 2 —— 简单了解订阅和发布(Pub/Sub),JDK17环境下用Jedis 4.3.1连接Redis并模拟验证码发送的更多相关文章
- Redis:学习笔记-04
Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...
- Redis:学习笔记-03
Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- JAVA WEB学习笔记(三):简单的基于Tomcat的Web页面
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- Spark学习笔记0——简单了解和技术架构
目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...
- Html学习笔记(二) 简单标签
标签的重点 标签的用途 标签在浏览器中的默认样式 <body>标签: 在网页上显示的内容 <p>标签: 添加段落 <hx>标签: 添加标题 标签一共有6个,h1.h ...
- Redis in Action : Redis 实战学习笔记
1 1 1 Redis in Action : Redis 实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://ww ...
- Redis:学习笔记-02
Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...
- 实现一个简单的订阅与发布模式的代码块,和redux
/** * Created by Mrzou on 2018/3/11. */ //实现简单的订阅与发布模式的代码块export function pattern() { let currentLis ...
随机推荐
- 一文了解 io.LimitedReader类型
1. 引言 io.LimitedReader 提供了一个有限的读取功能,能够手动设置最多从数据源最多读取的字节数.本文我们将从 io.LimitedReader 的基本定义出发,讲述其基本使用和实现原 ...
- hexo博客生成报错YAMLException: can not read a block mapping entry
报错信息: YAMLException: can not read a block mapping entry; a multiline key may not b --- title: [转]--I ...
- Hexo博客Next主题文章置顶相关
我需要写一些文章做推荐相关,需要文章置顶功能 博客效果 置顶方法配置 一.修改库文件 原理 在Hexo生成首页HTML时,将top值高的文章排在前面,达到置顶功能. 修改方法 修改Hexo文件夹下的n ...
- springboot下使用rabbitMQ之开发配置方式(一)
springboot下使用rabbitMQ之开发配置方式(一) 距离上次发布博客已经小一年了,这次...嗯,没错,我又回来啦... 本次结合着B站某MQ视频以及最近在MQ上的实践聊一聊个人在使用rab ...
- 【go语言】1.1.1 Go 语言的历史和背景
Go 语言,也被称为 Golang,是一种静态强类型.编译型的开源编程语言.Go 语言的出现是为了解决当下的软件开发问题,特别是大规模软件系统的开发. Go 语言的设计者包括 Robert Gries ...
- Shell 摘抄:growpart中的参数处理
下面这段代码中,变量cur表示这次循环所要处理的参数.如果没有触发前面的选项开关,第一个参数会被赋值给$DISK,第二个参数会赋值给$PART. 强无敌!- while [ $# -ne 0 ]; d ...
- 超越.NET极限:我打造的高精度数值计算库
超越.NET极限:我打造的高精度数值计算库 还记得那一天,我大学刚毕业,紧张又兴奋地走进人生第一场.NET工作面试.我还清楚地记得那个房间的气氛,空调呼呼地吹着,面试官的表情严肃而深沉.我们进行了一番 ...
- 使用 FastGPT 构建高质量 AI 知识库
作者:余金隆.FastGPT 项目作者,Sealos 项目前端负责人,前 Shopee 前端开发工程师 FastGPT 项目地址:https://github.com/labring/FastGPT/ ...
- 基于consul实现docker跨主机网络通信
前言 IP: 192.168.0.10 192.168.0.11 系统版本:ubuntu 20.04 consul版本:1.11.1 官网下载地址: https://www.consul.io/dow ...
- Spring Boot 启动流程追踪(第一篇)
1.初始化 SpringApplication public SpringApplication(ResourceLoader resourceLoader, Class<?>... pr ...