必须分层定位:先用INFO replication确认主从偏移量是否对齐,再用DBSIZE筛查键数量偏差,最后用redis-full-check做字段级验证,避免肉眼比对或抽样检查。

Redis集群出现数据不一致时,不能靠肉眼比对或抽样检查,必须分层定位:先看复制状态是否对齐,再查键数量是否匹配,最后用专业工具做字段级验证。手动逐个GET或HGETALL在生产环境既不可行也不可靠。
用INFO replication确认主从偏移量是否对齐
这是最轻量、最优先执行的判断动作。偏移量(master_repl_offset 和 slave_repl_offset)不一致,说明同步尚未完成,此时谈“数据一致”毫无意义。
- 在主节点执行
INFO replication,记录master_repl_offset值 - 在每个从节点执行
INFO replication,找到对应slave0或slave1的offset字段 - 若从节点
offset明显小于主节点(比如差值 > 1MB),说明存在积压,且可能已超出repl-backlog-size范围,触发全量同步前无法追平 - 注意:即使
state显示connected,offset差值大也代表实际数据滞后——网络抖动、慢查询、从节点负载高都可能导致该现象
用DBSIZE快速筛查键数量偏差
DBSIZE 返回当前数据库 key 总数,虽不能验证内容,但能暴露严重问题:比如从节点 key 数为 0,或比主节点少 30% 以上,基本可判定同步中断或配置错误。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 确保所有节点使用相同 database index(默认
db0),跨 db 比较无意义 - 避免在高峰期执行,
DBSIZE是 O(1) 但会触发内部统计刷新,高并发下可能短暂阻塞 - 若发现差异,不要直接认为“从节点丢数据”——先查
INFO replication,再查CLUSTER NODES看该节点是否被标记为fail?或handshake
用 redis-full-check 做字段级一致性验证
当偏移量对齐、键数量一致,但业务仍报“读到旧值”时,说明问题出在结构型数据(如 HASH、ZSET)的某个 field 或 score 上。redis-full-check 是目前唯一能覆盖全类型、支持多轮收敛的开源方案。
- 命令示例:
./redis-full-check -s 10.0.1.10:6379 -t 10.0.1.11:6379 --comparetimes=3,其中--comparetimes控制对比轮次,避免因瞬时写入导致误报 - 它不依赖 Redis 复制机制,而是直连源/目标实例并行扫描,因此能发现因
FLUSHALL、误删 key、AOF 重写失败等人为或异常导致的逻辑不一致 - 输出结果含三类关键信息:
missing keys(源有目标无)、extra keys(目标有源无)、content mismatch(key 存在但 value 不同),后者会精确到HASH的 field 或ZSET的 member/score - 注意:运行期间会对源/目标产生读压力,建议限速(
--qps=500)并在低峰期执行;若校验跨机房集群,务必确认网络延迟稳定,否则易因超时中断
避开常见核对陷阱
很多团队花几小时跑脚本却得不到结论,往往卡在几个隐蔽环节:
- 没区分集群模式与单实例模式:
redis-full-check默认按单实例校验,校验 Redis Cluster 必须加--cluster参数,否则只扫第一个 master 节点 - 忽略 slot 分布:用
CLUSTER KEYSLOT查某个 key 所属 slot,再用CLUSTER NODES确认该 slot 当前归属节点,避免拿错节点对比 - 把客户端重定向当“一致”:收到
MOVED后自动重试成功,不代表数据已同步——它只说明请求被路由到了正确节点,该节点自身数据可能仍滞后 - 误信
WAIT命令返回值:WAIT 2 0返回 2 只表示“至少 2 个从节点收到了命令”,不保证它们已执行完毕;真正强一致需配合min-replicas-to-write配置
真正耗时的从来不是工具执行,而是厘清“不一致”到底发生在哪一层:是复制链路断了?是某次故障转移后 backlog 被覆盖?还是应用双写时没控制好顺序?核对只是手段,定位根因才是关键。而根因往往藏在 INFO replication 的 offset 差值和 redis-full-check 的 content mismatch 细节里。

















