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

Redis怎样处理发布端与订阅端的性能不匹配

老丽吖_8666

老丽吖_8666

发布时间:2026-03-25 11:14:03

|

1067人浏览过

|

来源于php中文网

原创

Redis PUB/SUB不支持消息堆积,因无持久化、无缓冲、无背压机制,消息消费慢即丢失;应改用Redis Stream、Kafka或LPUSH/BRPOP等支持可靠传递的方案。

redis怎样处理发布端与订阅端的性能不匹配

发布端快、订阅端慢,消息堆积怎么办

Redis 的 PUB/SUB 本质是内存级广播,不持久、不排队、不确认。一旦订阅者消费速度跟不上,消息就直接丢——不是“堆积”,而是压根没地方堆。它底层用链表存待投递消息,每个订阅者独享一份副本,但这个链表不支持背压(backpressure),也没有缓冲区控制。

  • 别指望 SUBSCRIBE 自动限流或等待;它只管收,不反馈水位
  • 生产者调用 PUBLISH 返回成功 ≠ 消息被任何人收到,更不等于被处理完
  • 如果订阅进程卡住或重启,中间所有消息全部丢失,Redis 不做任何补偿
  • 单个订阅连接积压超过几万条消息时,可能触发客户端 OOM 或 Redis 内存暴涨(尤其用 Redisson 等封装库时)

为什么不能靠加订阅进程硬扛

加消费者看似能分摊压力,但 Redis PUB/SUB 是「一对多广播」,不是「负载均衡队列」。你起 10 个 SUBSCRIBE 连接,每条消息都会被复制 10 份发出去——带宽、CPU、内存全翻倍,反而加速瓶颈到来。

  • Redis 主线程要遍历所有订阅者链表,逐个 copy 消息,O(N) 时间复杂度
  • 每个订阅连接都维持独立 socket 和 buffer,连接数上去后,文件描述符和内存开销剧增
  • Redisson 默认的重连策略(如 EqualJitterDelay)在频繁断连时可能引发雪崩式重连风暴
  • Java 客户端若未显式配置 setConnectionWatcherTimeout(3000),连接假死检测滞后,堆积会持续更久

真正可用的缓解路径

把 PUB/SUB 当作轻量通知通道,而非可靠消息队列。真要解耦速率差,得换角色:让发布端只写,订阅端按需拉取。

  • 改用 LPUSH + BRPOP(或 BLPOP)组合:消息进 List,消费者阻塞读取,天然支持背压
  • 对高可靠场景,直接上 Kafka / RabbitMQ;Redis Stream(XADD/XREAD)也比 PUB/SUB 强得多,支持 ACK、消费者组、历史回溯
  • 如果必须用 PUB/SUB,发布端要主动降频:比如加 RateLimiter 控制 PUBLISH QPS,或聚合事件再发(如“过去 5 秒内价格变动汇总”)
  • 监控关键指标:INFO clients 看 connected_clients 和 client_longest_output_list,后者 > 1000 就说明某订阅者严重拖后腿

Redisson 订阅失效的典型诱因

很多人以为是网络问题,其实是连接状态管理失当。Redisson 默认的保活逻辑对瞬时抖动太敏感,又缺乏对消息积压的熔断感知。

  • 不要依赖默认重连参数;务必显式设置 config.setReconnectionDelay(new EqualJitterDelay(Duration.ofMillis(200), Duration.ofSeconds(60)))
  • 禁用自动重订阅(setAutoReconnect(false)),改为业务层兜底:连接恢复后重新 subscribe 并同步最新状态
  • 避免在订阅回调里做耗时操作(如 DB 写入、HTTP 调用),否则线程池打满,后续消息直接卡住
  • 检查日志中是否频繁出现 ConnectionWatchdog: Disconnected from Redis server —— 这是下游已断,但上游还在狂发,必须双向限流
Redis 的 PUB/SUB 天然不适合异步速率差大的场景,它的设计哲学就是「快进快出、丢了不管」。想靠调参或加机器绕过这个限制,只会让问题更隐蔽。真正的分界点在于:你要的是「通知」,还是「交付保证」。
数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

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

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

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

Atoms
Atoms Hot

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

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

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

切问学术

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

码上飞
码上飞 Hot

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

超级简历WonderCV

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

相关专题

更多
rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

664

2024.02.23

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

1148

2026.01.28

RabbitMQ使用教程合集
RabbitMQ使用教程合集

RabbitMQ使用教程合集整理 RabbitMQ 基础教程、消息队列开发案例、生产者消费者、交换机与队列实战内容。

224

2026.05.20

RabbitMQ集群部署指南
RabbitMQ集群部署指南

RabbitMQ集群部署指南聚合 RabbitMQ 集群部署、高可用架构、镜像队列、故障恢复、监控与运维优化内容。

137

2026.05.20

RabbitMQ Docker实战指南
RabbitMQ Docker实战指南

RabbitMQ Docker实战指南提供 RabbitMQ Docker 镜像部署、Docker Compose、Kubernetes Operator 与云原生实践教程。

162

2026.05.20

kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3206

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

690

2024.02.23

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

664

2024.02.23

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

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

精品课程

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

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