master_repl_offset 和 repl_offset 分别表示主节点最新复制偏移量和从节点已处理的偏移量,二者之差即从节点数据滞后字节数;该差值需结合 repl_backlog_size 判断是否触发全量同步。

redis-cli info replication 中的 master_repl_offset 和 slave_repl_offset 是什么
这两个值分别代表主节点和从节点当前已处理的复制流字节数(即复制偏移量),单位是字节。它们不是时间延迟,而是数据量差值——直接相减就能得到从节点“落后多少字节”。这个差值越小,说明复制越实时;如果持续增大,说明从节点追不上主节点写入节奏。
注意:slave_repl_offset 在 Redis 5+ 中已更名为 second_repl_offset(当该从节点本身也是主节点时)或统一显示为 slaveX_repl_offset(X 为序号),但更可靠的方式是看 role:slave 下的 master_repl_offset 和本机的 repl_offset 字段。
-
master_repl_offset在从节点的INFO REPLICATION输出中也会出现,表示主节点当前最新偏移量 -
repl_offset是从节点自己已接收并写入复制缓冲区的偏移量(即它实际处理到的位置) - 真正要算的是
master_repl_offset - repl_offset,不是和slave_repl_offset相减(后者在从节点上不显示)
用 redis-cli 实时计算偏移量差值的单行命令
别手动复制粘贴再心算,用 shell 管道一次性出结果:
redis-cli -h 127.0.0.1 -p 6380 INFO REPLICATION | awk -F': ' '/^master_repl_offset:/ {m=$2} /^repl_offset:/ {s=$2} END {if(m&&s) print m-s}'这条命令适用于从节点(role:slave)。其中 -h 和 -p 指向你的从节点地址;输出是纯数字,单位字节。若返回空,说明没匹配到字段——大概率是因为你连错了节点(连到了主节点)或 Redis 版本太老(repl_offset 在 4.0+ 才稳定出现在从节点 INFO 中)。
- Redis 6.2+ 支持
ROLE命令,可先确认角色:redis-cli ROLE | head -1,输出"slave"才继续 - 如果从节点启用了 diskless replication(
repl-diskless-sync yes),repl_offset依然准确,不影响计算 - 该差值会瞬时波动:主节点写入 burst、网络抖动、从节点 RDB 加载期间都会导致数值跳升
为什么不能只看 slave_repl_delay 或 info replication 的 delay 字段
slave_repl_delay(或 delay 字段)是 Redis 2.8+ 引入的秒级心跳估算值,由主节点通过 REPLCONF ACK 推算,**不是真实延迟,也不反映数据量**。它可能长期卡在 0(比如从节点停止上报 ACK),也可能因网络延迟虚高,但背后复制偏移量差为 0——此时实际没丢数据。
- 这个 delay 值在从节点自己的
INFO REPLICATION里不显示,只在主节点上能看到对应从节点的slaveX_delay - 它无法区分“网络慢”和“从节点卡住”,而
master_repl_offset - repl_offset能直接告诉你丢了/积压了多少字节的数据 - 监控系统里建议优先采集偏移量差值,而不是 delay;告警阈值设为 10MB(即 10 * 1024 * 1024)比设 “delay > 60s” 更可靠
注意 repl_backlog_active 和 repl_backlog_size 对差值解读的影响
复制积压缓冲区(replication backlog)是环形缓冲区,默认 1MB(repl-backlog-size)。当从节点断线重连,只要积压区还存着它断开时的偏移量之后的数据,就能部分同步(PSYNC);否则触发全量同步(SYNC)。
所以:即使你看到 master_repl_offset - repl_offset = 5MB,只要 repl_backlog_size >= 5MB,从节点仍可能快速追上;但如果差值超过 repl_backlog_size,就注定要全量同步——这是真正危险的信号。
- 查积压区大小:
redis-cli CONFIG GET repl-backlog-size - 查积压区是否启用:
redis-cli INFO REPLICATION | grep repl_backlog_active(1 表示启用) - 积压区过小是线上常见坑:主节点写入压力大时,1MB 很快被覆盖,导致频繁全量同步,加重主从负载
偏移量差值本身不难算,难的是理解它和积压区、网络、RDB/AOF 的耦合关系。很多人只盯着一个数字刷新,却没注意 repl_backlog_active 是否为 0——那意味着所有复制都走不了部分同步,差值再小也脆弱。


















