订阅连接的输出缓冲限制
发布订阅连接使用独立的输出缓冲限制项 client-output-buffer-limit pubsub,默认量级是 32mb 8mb 60,即硬上限 32mb、软上限 8mb 且持续 60 秒。订阅端消费速度跟不上发布速率时,消息在服务端缓冲里堆积,一旦触限,服务端直接断开这条订阅连接。断开是保护实例的动作,但订阅端会丢消息,业务必须有重连与补齐机制,否则数据会静默缺失。
基本信息
| 配置项 | client-output-buffer-limit pubsub |
|---|---|
| 默认取值 | 32mb 8mb 60 |
| 三个数值 | 硬限 / 软限 / 软限持续秒数 |
| 超限行为 | 服务端断开该连接 |
| 观测命令 | PUBSUB CHANNELS、PUBSUB NUMSUB |
| 连接级查看 | CLIENT LIST 中的缓冲字段 |
| 配套项 | maxmemory-clients 提供总量兜底 |
典型使用场景
- 热点频道出现订阅端掉线,判断是否被输出缓冲限制断开
- 设计订阅端消费模型时,评估缓冲上限与消费能力是否匹配
- 排查订阅端重连风暴,确认断连来自服务端还是客户端网络
- 为关键频道单独规划容量,避免大频道挤占实例内存
- 压测发布速率上限,量化实例能承受的广播规模
- 与连接驱逐指标联合观测,区分单连接超限与总量超限
查看与观测
查看与观测
redis-cli CONFIG GET client-output-buffer-limit # 三类限制一起看
redis-cli PUBSUB CHANNELS # 当前活跃频道
redis-cli PUBSUB NUMSUB news.hot # 指定频道的订阅数
redis-cli CLIENT LIST TYPE pubsub # 只看订阅连接
redis-cli INFO stats | grep -E 'evicted_clients' # 连接驱逐计数
redis-cli INFO memory | grep -E 'used_memory' # 缓冲是否推高内存输出缓冲限制三类
| 类别 | 约束对象 | 默认情况 |
|---|---|---|
| normal | 普通命令连接 | 默认不限制 |
| pubsub | 订阅连接 | 硬限 32mb 量级 |
| replica | 副本连接 | 另有独立默认值 |
断开慢订阅者只保护了实例,消息丢失的业务影响必须提前设计:订阅端重连后要能补齐断连窗口内的数据。
订阅端重连风暴会带来连接数与缓冲的双重压力,客户端重试要带退避。
软限配合秒数判断的是持续性堆积,偶发的一小段积压不会立刻断连,长期稳定的高缓冲才会触发。