【学习篇】redis发布订阅模式

Redis 的 发布订阅(Pub/Sub)模式 是一种 消息通信模式,允许客户端通过 频道(Channel) 实现消息的 一对多广播。发送消息的客户端称为 发布者(Publisher),接收消息的客户端称为 订阅者(Subscriber),Redis 服务器充当 中间转发者,将发布者的消息实时推送给所有订阅该频道的订阅者。

一、核心原理

1. 频道(Channel):消息的分类标签
  • 频道是一个 字符串标识(如 chat:newsorder:update),用于对消息进行分类。
  • 订阅者可以订阅一个或多个频道,发布者向指定频道发送消息,所有订阅该频道的订阅者都会收到消息(无持久化,消息仅实时推送,未在线的订阅者会丢失消息)。
2. 订阅者(Subscriber):主动监听频道
  • 订阅者通过 SUBSCRIBE 命令订阅频道,进入 监听状态(阻塞式等待消息)。
  • 一个订阅者可以同时订阅 多个频道(如 SUBSCRIBE channel1 channel2)。
  • 订阅后,Redis 会为该客户端维护一个 “订阅关系表”(记录客户端 ID 与频道的映射)。
3. 发布者(Publisher):向频道发送消息
  • 发布者通过 PUBLISH channel message 命令向指定频道发送消息,自身不关心订阅者是谁。
  • Redis 收到消息后,会 遍历订阅该频道的所有客户端,将消息 立即推送给每个订阅者(不存储消息,即“即发即失”)。
4. 核心数据结构:订阅关系表

Redis 内部通过一个 字典(Dict) 维护订阅关系:

  • Key:频道名称(如 chat:news)。
  • Value:一个 集合(Set),存储订阅该频道的客户端 ID(Client ID)。
# Redis 内部订阅关系表示例
{
  "chat:news": {client1001, client1002, client1003},  # 3个订阅者
  "order:update": {client1001, client1004}            # 2个订阅者
}
  • 当发布者发送消息到 chat:news 时,Redis 会遍历 client1001client1002client1003,将消息推送给它们。

二、工作流程(步骤拆解)

Step 1:订阅者订阅频道
# 客户端 A 订阅频道 "chat:news"
127.0.0.1:6379> SUBSCRIBE chat:ne
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草莓仙生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值