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 ...
随机推荐
- 生成CSV文件的方法*(LIST集合为数据和生成的文件名)
/** * 生成csv文件 * @param pointsList 组织实体 * filename 生成的文件名 * list 要生成的数据 * @return */ public void Poin ...
- Hexo博客Next主题配置加载优化性能提升
主题源加载优化 把在NexT主题的_config.yml里面的: # Uri of fonts host. E.g. //fonts.googleapis.com (Default) host: 改为 ...
- Cannot use v-for on stateful component root element because it renders multiple elements.
<template name:trailerStars> <image v-for="yellow in yellowScore" src="../st ...
- linux编译安装nginx
前言 系统:centos7和debian11均验证可行 本文将nginx默认支持的编译参数都加上了,所以需要的依赖比较多,酌情配置. 步骤 假设安装在/usr/local/nginx,创建安装目录 m ...
- TRL 正式推出,来训练你的首个 RLHF 模型吧!
我们正式向大家介绍 TRL--Transformer Reinforcement Learning.这是一个超全面的全栈库,包含了一整套工具用于使用强化学习 (Reinforcement Learni ...
- 干了这么多年C#,后悔没早点用这种“分页”,简单/高效/易维护
[前言] 干了这么多年C#,后悔没早点用这种"分页",简单/高效/易维护,比其它的分页方式强多了,不信你自己看. [正文] 支持.Net Core(2.0及以上)与.Net Fra ...
- Vu3+Element-Plus根据路由配置生成菜单导航栏
先看效果,整体界面结构如下 点击左侧菜单栏,右侧切换显示不同页面内容. Vue3使用路由–南河小站 1 路由配置 路由配置如下: const routes = [ { path: "&quo ...
- vivo 容器集群监控系统优化之道
作者:vivo 互联网容器团队 - Han Rucheng 本文介绍了vivo容器团队基于 Prometheus等云原生监控生态来构建的容器集群监控体系,在业务接入容器监控的过程中遇到的挑战.困难,并 ...
- Win11+ VS2022编译 FFmpeg6.0 静态库
目录 编译前言 为什么项目编译? 前期准备 环境配置 ffmpeg外部库 额外的编译选项-for渲染 opengl (需要glext) ffnvcodec (需要nv-codec-headers) A ...
- Java程序员学vue3最好的方式就是搭建后台管理模板
前言 作为Java程序员,vue3还是有必要学的,毕竟是国内最受欢迎的前端JS框架,你现在接手的项目,前端部分几乎都会和vue沾边,尤其是中小企业. vue3作为新的大版本,相较于vue2改动还是很多 ...