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并模拟验证码发送的更多相关文章

  1. Redis:学习笔记-04

    Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...

  2. Redis:学习笔记-03

    Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...

  3. Redis:学习笔记-01

    Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...

  4. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  5. JAVA WEB学习笔记(三):简单的基于Tomcat的Web页面

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  6. Spark学习笔记0——简单了解和技术架构

    目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...

  7. Html学习笔记(二) 简单标签

    标签的重点 标签的用途 标签在浏览器中的默认样式 <body>标签: 在网页上显示的内容 <p>标签: 添加段落 <hx>标签: 添加标题 标签一共有6个,h1.h ...

  8. Redis in Action : Redis 实战学习笔记

    1 1 1 Redis in Action : Redis  实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://ww ...

  9. Redis:学习笔记-02

    Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...

  10. 实现一个简单的订阅与发布模式的代码块,和redux

    /** * Created by Mrzou on 2018/3/11. */ //实现简单的订阅与发布模式的代码块export function pattern() { let currentLis ...

随机推荐

  1. 给SqlSugar一个优化建议

    声明:本作者无恶意只是觉得这个功能很不错,平常工作当中经常用到,自己框架也做了相应的支持,本着技术共享目的. 一.对象组合设置列更新支持 建议度:高 业务场景 1.更新列表需统一设置 例如:修改人ID ...

  2. JAVA小白找工作必备建议

    如果您是一名刚入门的JAVA小白,正在寻求工作机会,那么恭喜您来对地方!本文将为您提供一些建议,帮助您在求职过程中更好地展现自己的优势和准备迎接新的挑战. 1.基础知识打牢 在找工作前,务必确保您对J ...

  3. 在windows平台使用Visual Studio 2017编译动态库并使用

    使用VS stdio制作顺序表的库文件 .lib与.dll 区别 lib是编译时需要的 dll是运行时需要的 1.新建头文件和源文件 SeqList.h // SeqList.h #ifndef SE ...

  4. 【Leaflet专题篇】L.tileLayer图层顺序问题

    1 问题复现 使用L.tileLayer加载底图(A.B.C)并使用layerControl管理.在用L.tileLayer.wms添加wms服务(D),当切换ABC时会压盖D视频中右下角的wms服务 ...

  5. 使用ClamAV进行linux病毒扫描

    前言 ClamAV是一个在命令行下查毒(并非杀毒)的软件,其免费开源跨平台.ClamAV默认只能查出服务器内的病毒,但是无法清除,最多删除. 安装ClamAV yum install -y epel- ...

  6. 【动画进阶】神奇的 3D 磨砂玻璃透视效果

    最近,群友分享了一个很有意思的效果: 原效果的网址:frosted-glass.该效果的几个核心点: 毛玻璃磨砂效果 卡片的 3D 旋转跟随效果 整体透明度和磨砂感.以及卡片的 3D 形态会随着用户移 ...

  7. WPF实现跳动的字符效果

    本文将介绍一个好玩但实际作用可能不太大的动画效果:跳动的字符.为了提高动画效果的可重用性以及调用的灵活性,通过Behavior实现跳动的字符动画.先看下效果: 技术要点与实现 通过TextEffect ...

  8. Dokcer学习之旅(2)——Dockerfile基础应用

    什么是Dockerfile? 从docker commit 的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本, ...

  9. 将实体类对象数据存入和读取进csv文件(可追加)

    前言 最近公司一个新的项目,因为需要存储的数据很少,单独去部署一个数据库去存储该数据显然是不划算的,所以想的是通过存入csv文件中来代替存入数据库中.说干就干. 什么是csv文件 CSV代表逗号分隔值 ...

  10. 《Linux基础》06. 进程管理 · 服务管理

    @ 目录 1:进程管理 1.1:查看进程 1.1.1:ps 1.1.2:pstree 1.1.3:top 1.2:终止进程 1.2.1:kill 1.2.2:killall 2:服务管理 2.1:运行 ...