讲师中心 微信公众号
AI工具推荐 视频效率加速

为什么Redis 5.0引入Stream后PubSub还没被废弃_分析PubSub在实时信令中的优势

轻杰酱_9497

轻杰酱_9497

发布时间:2026-08-27 06:44:24

|

618人浏览过

|

来源于php中文网

原创

Pub/Sub不可替代,因其低开销、零延迟、无状态广播特性,适合WebSocket心跳等实时信令;而Stream需维护ID、PEL、游标和ACK状态,内存开销大。

为什么redis 5.0引入stream后pubsub还没被废弃_分析pubsub在实时信令中的优势

Redis 5.0 引入 Stream 后,Pub/Sub 没被废弃,不是因为 Redis 官方“忘了删”,而是它在特定场景下仍有不可替代性:**低开销、零延迟、无状态广播——尤其适合实时信令类流量,比如 WebSocket 心跳、在线状态同步、游戏帧同步通知。**

Pub/Sub 在连接态管理中为什么比 Stream 更轻?

Stream 要维护消息 ID、PEL、消费者组游标、ACK 状态,哪怕只读不 ACK,也会在内存里堆积 pending entries;而 Pub/Sub 的 PUBLISH 命令执行完,消息就从内存里彻底释放,不写 AOF、不进 RDB、不占任何数据结构。

  • 一个 PUBLISH channel1 "ping" 的开销,接近一次纯内存 memcpy,实测 P99 延迟通常 XADD + XREADGROUP 链路至少多出 3–5 倍 CPU 和内存操作
  • 当你要给 1000 个在线 WebSocket 连接广播“用户 A 已上线”,用 Pub/Sub:1 次发布,1000 个客户端同时收到;用 Stream:要么建 1000 个独立消费者(内存爆炸),要么用 1 个消费者组 + 1000 个 client-side 分发(网络和逻辑双层放大)
  • 没有连接时,PUBLISH 直接返回 0,不触发任何后台逻辑;Stream 却要检查 group、检查 pending、更新 last_delivered_id——哪怕没人订阅,这些检查都照做

为什么 WebSocket 心跳不能用 Stream 替代?

心跳的本质是“我还在”,不是“请处理这个任务”。它不要求重试、不关心是否被处理、甚至不关心对方是否收到了——只要发出即完成语义。用 Stream 强加 ACK 和重投,反而引入复杂性和风险。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • 心跳包若因网络抖动没被 ACK,Stream 会把它留在 PEL 里,下次 XREADGROUP 还会推给你,结果服务端反复重发“我还在”,客户端却早已断连,变成无效轮询
  • 心跳频率通常是秒级(如 30s 一 ping),但 Stream 的 XREADGROUP 默认阻塞超时建议设为 5s 以上,否则频繁唤醒+空轮询会显著抬高 CPU;Pub/Sub 的 pubsub.listen() 是纯事件驱动,无轮询、无超时、无唤醒开销
  • WebSocket 服务常部署在反向代理后,客户端可能短时断连再重连;Pub/Sub 允许你用 PSUBSCRIBE user:* 动态匹配新连接,Stream 的 consumer group 名称必须提前创建且固定,无法按连接 ID 动态分组

哪些错误会让 Pub/Sub 在信令场景下“看似可靠”实则危险?

最容易踩的坑,是把 Pub/Sub 当成“弱化版 Stream”来用,试图靠重连+重订阅“模拟持久化”。

  • pubsub.listen() 阻塞后,如果没用 try/except 包裹或没处理 ConnectionError,Python 进程会静默卡死,后续所有消息都收不到——这不是丢消息,是整条通道静音
  • 用 SUBSCRIBE 后没调用 pubsub.close(),连接泄漏,Redis 的 client list 里会积累大量 idle=0 的 pubsub 连接,最终触发 maxclients 限制,新订阅失败
  • 在 Kubernetes 环境下,Pod 重启时旧连接未优雅关闭,Redis 侧仍认为客户端在线,新实例 SUBSCRIBE 同一 channel,导致消息被两个实例重复消费(Pub/Sub 不保证“至多一次”,只保证“至少一次”广播)

真正关键的取舍点不在功能多寡,而在语义匹配:Pub/Sub 是“喊一嗓子就走”,Stream 是“挂号+签收+存根”。信令不需要存根,要的是那一嗓子的干脆利落——慢半拍的心跳,不如没有。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

SkildArt
SkildArt Hot

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

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

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

豆包大模型

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

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

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

相关专题

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

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

4229

2023.11.02

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

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

3715

2023.11.14

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

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

6652

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

623

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

736

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6182

2024.04.07

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1140

2024.04.07

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

996

2024.04.07

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

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

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