首页/数据/Redis 进阶速查/repl-backlog:积压缓冲的容量与保留
主从与哨兵51 条

repl-backlog:积压缓冲的容量与保留

repl-backlog-size 决定主库为断线从库保留多少复制数据;网络抖动大、写入量高的环境需要放大 backlog,从库长期离线则缓冲可释放。

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

断线重连的缓冲带

repl-backlog 是主库维护的一块环形缓冲,用来保存最近一段复制流。从库短暂断线后重新连上时,如果它的偏移仍落在缓冲覆盖范围内,就只需要补发差量完成部分重同步,而不必做代价高昂的全量同步。容量由 repl-backlog-size 决定,默认 1MB;当所有从库都长期离线时,主库可以在 repl-backlog-ttl 指定的时间之后释放这块内存。

基本信息

容量参数repl-backlog-size,默认 1mb
释放策略repl-backlog-ttl,默认 3600 秒
作用决定断线重连能否走部分重同步
相关字段INFO replication 中的 backlog 相关项
内存代价占用主库的常驻内存,与数据集共享预算

典型使用场景

  • 网络抖动较多的环境放大容量,减少全量同步次数
  • 从库维护窗口前估算需要覆盖多长的断线时间
  • 排查「每次重连都触发全量同步」的问题
  • 高写入实例评估缓冲大小对内存占用的影响
  • 重建从库与主从切换流程中的参数核对

查询与调整

查询与调整
redis-cli CONFIG GET repl-backlog-size
redis-cli CONFIG GET repl-backlog-ttl
redis-cli CONFIG SET repl-backlog-size 64mb      # 按速率与容忍时长估算
redis-cli INFO replication | grep -E 'repl_backlog|master_repl_offset'
redis-cli INFO stats | grep -E 'sync_full|sync_partial_ok|sync_partial_err'   # 部分同步成效
redis-cli CONFIG REWRITE

容量估算示例

输入项示例值说明
峰值写入速率5MB/s决定每秒占用多少缓冲
可容忍断线时长60 秒业务可接受的最长同步中断
估算结果至少 300MB速率乘以时长即最小容量
内存预算主库可用内存缓冲与数据集共享同一份内存
部分重同步是否有效可以从统计项看出来:全量同步次数持续增长而部分同步成功数不增长,说明缓冲覆盖不了实际的断线时长,需要放大容量或缩短故障处理时间。
缓冲只在主库侧维护,而从库反复全量同步的代价也主要落在主库:一次全量同步会触发一次 fork 并生成快照文件,还要把快照完整传输给从库,消耗的 CPU、内存、网络与磁盘资源都远超补发差量的部分重同步。
调整容量时建议同时记录一次真实的断线重连过程:观察部分重同步是否成功、耗时多长、主库指标是否平稳,用实测结果校准容量,比单纯按公式估算更可靠。

易错点

  • 沿用默认容量,写入量大的实例断线几秒就要全量同步,主库被反复 fork 拖慢
  • 把缓冲当成万能解,忽略部分重同步还要求从库偏移落在缓冲覆盖范围内
  • 盲目放大容量,缓冲占用主库内存后与业务数据争抢预算
  • 把释放时间调得过短,刚离线的从库回来时缓冲已被释放,只能走全量同步

数据来源与参考

  • Redis 官方文档:redis.conf repl-backlog 相关配置
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌