Redis篇-4--原理篇3--Redis发布/订阅(Pub/Sub)

1、概述

Redis 发布/订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息传递模式,允许客户端订阅一个或多个通道(channel),并接收其他客户端发布到这些通道的消息。

2、Redis 发布/订阅的主要概念

发布者(Publisher):发布者可以向指定的通道发送消息。每个消息会被发送给所有订阅了该通道的客户端。

订阅者(Subscriber):订阅者可以订阅一个或多个通道,并接收订阅通道的消息。订阅者不会直接与发布者交互,它们只负责监听通道中的消息。

通道(Channel):通道是消息传递的媒介。发布者将消息发布到特定的通道,订阅者从这些通道接收消息。通道的名字是一个字符串,可以是任意的标识符。

3、redis发布订阅的关键特性

多播(Multicasting):当发布者向某个通道发布消息时,所有订阅了该通道的客户端都会收到这条消息。这意味着每个订阅者都可以独立地接收到相同的消息,而不需要与其他订阅者竞争。

无状态:Redis 本身不保存消息的历史记录。一旦消息被发布并分发给所有订阅者,它就会被丢弃。因此,如果某个订阅者在消息发布时没有连接,它将无法接收到该消息。这与消息队列(如 RabbitMQ 或 Kafka)不同,后者通常会保留消息直到所有订阅者都处理完毕。

模式匹配 :Redis 支持基于模式的订阅。订阅者不仅可以订阅具体的通道,还可以订阅符合某些模式的通道。例如,订阅者可以订阅所有以 news.* 开头的通道,从而接收所有匹配该模式的消息。

轻量级:Redis 的发布/订阅机制非常轻量级,适合用于简单的实时通知和事件驱动的应用程序。它不提供复杂的排队、持久化或确认机制,因此不适合用于需要可靠消息传递的场景。

4、Redis 发布/订阅的命令

(1)、SUBSCRIBE channel [channel ...]
作用 :订阅一个或多个通道。订阅后,客户端会进入订阅模式,只能接收消息,不能再执行其他命令(除了 UNSUBSCRIBE 和 PING)。
示例:(订阅news.sports和news.tech两个主题)

java 复制代码
 SUBSCRIBE news.sports news.tech

订阅主题后,打印了相关信息。

(2)、UNSUBSCRIBE [channel [channel ...]]
作用 :取消订阅一个或多个通道。如果不指定通道,则取消订阅所有通道。
示例:(取消订阅news.sports这个主题)

java 复制代码
UNSUBSCRIBE news.sports

(3)、PSUBSCRIBE pattern [pattern ...]
作用 :订阅符合某个模式的通道。模式可以包含通配符 *?,类似于 Unix shell 的文件名匹配规则。
示例:(订阅news.*格式的全部主题,之后只要发布new.开头的主题得消息,这个订阅者就都能接收到)

java 复制代码
 PSUBSCRIBE news.*

(4)、PUNSUBSCRIBE [pattern [pattern ...]]
作用 :取消订阅符合某个模式的通道。如果不指定模式,则取消订阅所有模式。
示例:(取消订阅news.*格式的全部主题)

java 复制代码
 PUNSUBSCRIBE news.*

(5)、PUBLISH channel message
作用 :向指定的通道发布一条消息。所有订阅了该通道的客户端都会收到这条消息。
返回值 :返回收到该消息的订阅者数量。
示例:(向news.sports主题中发布消息)

java 复制代码
 PUBLISH news.sports "Breaking sports news: Team A wins!"

可以看到在订阅了news.*主题后,在新的客户端发布消息可以正常打印。

学海无涯苦作舟!!!

相关推荐
呼啦啦啦啦啦啦啦啦18 分钟前
【Redis】持久化机制
java·redis·mybatis
C嘎嘎嵌入式开发23 分钟前
什么是僵尸进程
服务器·数据库·c++
Yeats_Liao2 小时前
Navicat 导出表结构后运行查询失败ERROR 1064 (42000): You have an error in your SQL syntax;
数据库·sql
明月看潮生3 小时前
青少年编程与数学 02-007 PostgreSQL数据库应用 15课题、备份与还原
数据库·青少年编程·postgresql·编程与数学
明月看潮生3 小时前
青少年编程与数学 02-007 PostgreSQL数据库应用 14课题、触发器的编写
数据库·青少年编程·postgresql·编程与数学
加酶洗衣粉8 小时前
MongoDB部署模式
数据库·mongodb
Suyuoa8 小时前
mongoDB常见指令
数据库·mongodb
添砖,加瓦8 小时前
MongoDB详细讲解
数据库·mongodb
Zda天天爱打卡8 小时前
【趣学SQL】第二章:高级查询技巧 2.2 子查询的高级用法——SQL世界的“俄罗斯套娃“艺术
数据库·sql
我的运维人生8 小时前
MongoDB深度解析与实践案例
数据库·mongodb·运维开发·技术共享