讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

updream

一键生成高质量推广成片

AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

Redis发布订阅与Redis Stream如何混合使用_构建分层级、高可靠的消息系统

酷萱姑娘_9740

酷萱姑娘_9740

发布时间:2026-04-15 09:39:34

|

765人浏览过

|

来源于php中文网

原创

Redis 的 PUB/SUB 和 Stream 不能混合使用,因二者底层独立、命令互斥;SUBSCRIBE 后连接进入订阅模式,禁止执行 XREAD 等命令;应分层使用:Stream 承载可靠业务流,PUB/SUB 仅作瞬时广播通知。

redis发布订阅与redis stream如何混合使用_构建分层级、高可靠的消息系统

不能直接混合使用。Redis 的 PUB/SUB 和 Stream 是两套完全独立的消息机制,底层数据结构、命令集、状态管理互不兼容,强行“混合”只会导致消息丢失、重复消费或连接阻塞。

为什么不能在同一个消费者里同时用 SUBSCRIBE 和 XREAD

Redis 客户端一旦执行 SUBSCRIBE,就进入订阅模式(subscribe state),此时只能接收 SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、PUNSUBSCRIBE 四个命令的响应;其他任何命令(包括 XREAD、GET、LPUSH)都会被拒绝,返回 ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context。

常见错误现象:

  • 代码里先 SUBSCRIBE topic1,再试图 XREAD COUNT 1 STREAMS mystream $ —— 直接报错
  • 用一个连接既做发布/订阅又做 Stream 消费 —— 连接卡死,后续命令全部 hang 住
  • 误以为 PUBSUB CHANNELS 能查到 Stream 的 group 或 consumer —— 实际返回空,因为 Stream 不属于 Pub/Sub 系统

真正可行的分层方案:用 Stream 承载主业务流,PUB/SUB 做轻量通知

两者不是替代关系,而是分工关系:Stream 存储需可靠投递、可回溯、支持多消费者组的消息;PUB/SUB 只负责瞬时广播,比如配置变更通知、服务上下线心跳、实时指标推送等不需要持久化的场景。

deepstream-dev
deepstream-dev

使用 Python pyservicemaker API 进行 NVIDIA DeepStream SDK 开发。在构建视频分析流水线、基于 GStreamer

下载

实操建议:

  • 把核心业务事件(如订单创建、支付成功、库存扣减)全部写入 Stream,用 XADD + XGROUP CREATE + XREADGROUP 构建可重放、可确认、可伸缩的消费链路
  • 用 PUBLISH config:reload 触发所有网关节点热重载配置,不依赖 Stream 的 offset 管理,也不关心谁收到——只要在线就立刻生效
  • 避免让 PUB/SUB 承担任何需要“至少一次”语义的逻辑,例如“发送邮件”“调用第三方 API”,这类操作必须走 Stream + 消费者组 + ACK 机制
  • 如果需要“某类事件发生后广播通知”,不要在 Stream 消费器里再 PUBLISH 一遍——这会引入时序混乱和重复,应由上游生产者按需双写

Stream 的消费者组 vs PUB/SUB 的多订阅者:别混淆语义

看起来都是“一对多”,但行为完全不同:

  • Stream 每个消费者组内,同一条消息只被一个消费者读取(竞争消费),且通过 ACK 控制消息生命周期;XREADGROUP GROUP g1 c1 COUNT 1 返回的是未被该组内任何 consumer 处理过的消息
  • PUB/SUB 所有订阅者无差别收到每条消息(广播消费),没有 ACK,没有 offset,断连即丢
  • 想实现“每个服务实例都处理同一事件”,用 PUB/SUB;想实现“多个 worker 协同处理海量订单”,必须用 Stream + 消费者组
  • Stream 支持 XCLAIM 处理失败消息,PUB/SUB 没有对应能力

最常被忽略的一点:Stream 的 MAXLEN 和 TRIM 策略决定了消息保留窗口,而 Pub/Sub 的消息连内存都不留——如果你在 Stream 上没设 MAXLEN ~,日积月累可能撑爆内存;但如果你依赖 Pub/Sub 做关键状态同步,那从第一天起就注定不可靠。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3908

2023.11.20

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2901

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

416

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

437

2026.01.06

C++ 数据结构与算法实现教程合集
C++ 数据结构与算法实现教程合集

以 C++ 为实现语言,系统讲解核心数据结构与算法,涵盖链表(单链表/双链表/环检测)、栈与队列(单调栈/优先队列)、二叉树(遍历/BST/AVL/红黑树)、哈希表(开地址法/链地址法)、图(邻接表/BFS/DFS/Dijkstra/拓扑排序)、常见排序算法(快排/归并/堆排/计数排序)的实现与复杂度分析,同时分享 LeetCode 刷题技巧、竞赛编程常用模板(二分/前缀和/滑动窗口/动态规划),帮助开发者夯实算法基础。

492

2026.05.09

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4949

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4535

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

8792

2024.04.02

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go-Zero官方文档
Go-Zero官方文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn