游乐游手机版
首页/数据库/文章详情

Redis PubSub发布订阅模式详解:命令、流程与使用场景

时间:2026-08-31 22:44
Redis PubSub(发布 订阅)是一种基于频道的消息多播机制,适用于实时通知与轻量级解耦场景。本文通过图解与终端交互示例,演示订阅、发布与接收的完整流程,汇总常用命令并说明模式匹配与状态查询方法,帮助开发者快速掌握其使用边界与注意事项。

Redis PubSub 是一种基于频道的消息多播机制,发布者发送消息后,所有订阅该频道的客户端都会实时收到副本。本文通过终端交互示例演示订阅、发布与接收的完整流程,汇总常用命令并说明模式匹配与状态查询方法,帮助开发者判断其适用场景与使用边界。

发布/订阅完整流程

Redis PubSub 模块又称发布/订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(发送方)将消息发送到指定 channel(频道),订阅者(接收方)接收消息。在 Redis 中,一个客户端可以订阅任意数量的 channel。

消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的一种解耦方式。

下面通过两个终端窗口演示“发布/订阅”模式的工作流程:

Redis PubSub消息发布订阅

1) 订阅者等待接收消息

打开第一个 Redis 客户端,使用 SUBSCRIBE 命令订阅名为 www.biancheng.net 的频道:

#订阅channel
127.0.0.1:6379> SUBSCRIBE www.biancheng.net
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "www.biancheng.net"
3) (integer) 1 

命令执行后,该客户端会进入等待接收消息的阻塞状态。

2) 发布者发送消息

打开第二个 Redis 客户端,使用 PUBLISH 命令向同一频道发送消息:

127.0.0.1:6379> PUBLISH www.biancheng.net "this is website"
(integer) 1
127.0.0.1:6379> PUBLISH www.biancheng.net "hello world"
(integer) 1
127.0.0.1:6379> PUBLISH www.biancheng.net "how are you"
(integer) 1

此时两个客户端处于同一个频道,前者负责接收,后者负责发布。

3) 订阅者成功接收消息

回到第一个客户端,会看到如下输出:

127.0.0.1:6379> SUBSCRIBE www.biancheng.net
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "www.biancheng.net"
3) (integer) 1
1) "message"
2) "www.biancheng.net"
3) "this is website"
1) "message"
2) "www.biancheng.net"
3) "hello world"
1) "message"
2) "www.biancheng.net"
3) "how are you"

常用命令与参数说明

Redis PubSub常用命令
命令 说明
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合指定模式的频道。
PUBSUB subcommand [argument [argument ...]] 查看发布/订阅系统状态,可选参数:
1) channel 返回在线状态的频道。
2) numpat 返回指定模式的订阅者数量。
3) numsub 返回指定频道的订阅者数量。
PUBLISH channel message 将信息发送到指定的频道。
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有指定模式的频道。
SUBSCRIBE channel [channel ...] 订阅一个或者多个频道的消息。
UNSUBSCRIBE [channel [channel ...]] 退订指定的频道。

模式匹配与状态查询

使用 PSUBSCRIBE 可以通过通配符 * 批量订阅频道。例如 www* 会匹配所有以 www 开头的频道(如 www.baidu.comwww.biancheng.net 等)。

#订阅指定模式的频道,*代表通配符,会匹配所有www开头的频道
127.0.0.1:6379> PSUBSCRIBE www*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "www*"
3) (integer) 1
#按ctrl+c退出阻塞状态
^C
C:UsersAdministrator>redis-cli
#查看发布订阅系统状态,返回相应的频道
127.0.0.1:6379> PUBSUB channels
1) "www.biancheng.net"
#退订指定模式的频道
127.0.0.1:6379> PUNSUBSCRIBE www*
1) "punsubscribe"
2) "www*"
3) (integer) 0
#退订指定频道
127.0.0.1:6379> UNSUBSCRIBE www.biancheng.net
1) "unsubscribe"
2) "www.biancheng.net"
3) (integer) 0

通过 PUBSUB channels 可查看当前活跃的频道列表;PUNSUBSCRIBEUNSUBSCRIBE 分别用于按模式或按频道名称退订。

适用场景与注意事项

PubSub 适合对消息可靠性要求不高、但需要低延迟广播的场景,例如实时通知、配置热更新、轻量级事件总线等。其核心特点与限制如下:

  • 无持久化与回溯:消息仅在发布瞬间投递给当前在线的订阅者,未订阅或断线的客户端无法补收历史消息。
  • 阻塞式连接:执行 SUBSCRIBEPSUBSCRIBE 后,客户端连接进入订阅模式,只能继续执行订阅相关命令,需通过 Ctrl-C 或退订命令恢复常规操作。
  • 无消费确认机制:消息投递后不等待 ACK,发布者仅获知当前订阅者数量(返回值),无法确认消息是否被成功处理。

若业务需要消息持久化、顺序保证或消费确认,建议评估 Redis Stream 或 List 结构,或引入专用消息中间件。在线练习工具:https://try.redis.io/;查看更多命令:https://redis.io/commands

来源:https://m.biancheng.net/redis/pubsub.html
上一篇Redis Stream消息队列:核心概念、命令与实战指南 下一篇Redis连接命令详解:AUTH、PING、SELECT等命令使用指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis是什么:核心特性、架构与应用场景解析
数据库 · 2026-09-01

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

Windows 安装 MongoDB 完整图文教程
数据库 · 2026-09-01

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
数据库 · 2026-09-01

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

MacOS安装MongoDB完整教程
数据库 · 2026-09-01

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

Ubuntu系统安装与配置Redis完整指南
数据库 · 2026-09-01

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。