首页/数据/Redis 进阶速查/应用启动的连接预热
性能与排障129 条

应用启动的连接预热

应用发布时批量建连会形成瞬时压力:连接池分阶段填充、预热完成再放流量,避免启动即高峰。

Redis 进阶速查数据更新于 2026-10-13

发布时的建连风暴

应用发布时批量建连会形成瞬时压力:每个副本启动都要建立池内连接、完成认证与初始化,多个副本同时发布时这些动作叠加,新建连接速率短时间飙高,服务端要处理大量握手与内存分配。做法是连接池分阶段填充、预热完成后再接入流量,并把预热与就绪检查串起来,让流量只打到已就绪的实例。

基本信息

问题表现启动瞬间建连风暴,新建连接速率短时飙高
缓解方案连接池渐进填充,预热完成后放量
验证指标rejected_connections 与连接数曲线
发布配合滚动发布,预热与就绪检查串联
池参数初始化连接数、最大连接数、获取连接超时

典型使用场景

  • 滚动发布:逐批上线,避免所有副本同时建连
  • 弹性扩容:新副本启动时集中建连,需要对填充速率限速
  • 大促扩容:提前扩容并把连接预热做在流量上涨之前
  • 故障恢复:实例恢复后客户端同时重连,预热策略用来削峰
  • 发布验收:看连接数与拒绝量,确认没有出现异常尖峰

两端一起看

两端一起看
redis-cli INFO clients | grep -E 'connected_clients|maxclients'   # 连接水位与上限
redis-cli INFO stats | grep rejected_connections                  # 是否出现拒绝
redis-cli INFO clients | grep client_recent_max_input_buffer      # 单连接缓冲峰值
redis-cli INFO stats | grep total_connections_received            # 新建连接速率
# 应用侧示意:池按批填充,例如每批 5 条连接、间隔 200ms,填满后再接流量

发布阶段对照

阶段连接行为要看什么
副本启动池开始建立连接建连速率是否被限住
预热完成池达到目标连接数延迟与错误率是否正常
接入流量流量逐步导入拒绝量是否保持为零
全量运行连接数趋于稳定连接数不再持续上涨
预热与就绪检查要串起来:就绪通过才把实例放进负载列表,否则流量会在池还没填满时打进来,由冷连接承担高峰。
多个副本同时发布会让建连风暴叠加,服务端短时间内要处理成倍的新建连接;分批发布加限速填充是成本最低的做法。

易错点

  • 多副本同时发布:建连风暴叠加,服务端瞬时压力远超常态
  • 预热未完成就通过就绪检查:流量先行、冷连接承担高峰,错误率明显抬升
  • 池初始化不留间隔:一次性建满全部连接,短时间把服务端连接数推到上限
  • 只看应用日志:服务端 rejected_connections 与连接曲线才是判断依据

数据来源与参考

  • Redis 官方实践:发布与连接
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌