首页/数据/数据库速查/WAIT 等待从库确认(半同步语义)
Redis 运维与场景124 条

WAIT 等待从库确认(半同步语义)

WAIT numreplicas timeout:等待至少 N 个从库确认收到此前所有写命令(毫秒超时),返回实际确认数——Redis 默认异步复制的补偿手段。

数据库速查数据更新于 2026-10-13

WAIT 解决什么问题

Redis 复制默认是异步的:主库写完就返回,从库可能还没收到。WAIT numreplicas timeout 让当前连接阻塞等待,直到指定数量的从库确认已收到此前所有写命令,返回实际确认的副本数。它是应用侧按需增强可靠性的手段,把「至少一个副本已收到」这件事变成可观测的返回值,而不是全局的同步复制开关。

基本信息

适用平台Redis 3.0+;语义与客户端阻塞行为有关
语法WAIT numreplicas timeout
timeout 单位毫秒;0 表示无限等待
返回值实际确认的从库数量
作用范围当前连接在此之前发出的写命令

典型使用场景

  • 关键订单写入后确认至少一个副本已收到,缩短故障丢失窗口
  • 切换演练:验证拓扑中从库确认链路是否健康
  • 把 WAIT 的返回值接入监控,观察副本确认能力的趋势
  • 对可靠性要求分级的业务:核心写路径加 WAIT,非核心路径不加
  • 排查复制健康度:返回值长期为 0 说明从库未及时确认

示例与返回值解读

示例与返回值解读
SET order:88 paid               # 写入关键数据
WAIT 1 1000                    # 等待至少 1 个从库确认,最多 1000 毫秒
# 返回 1 表示已有 1 个从库确认;返回 0 表示超时未确认
WAIT 2 500                     # 期望 2 个副本确认,返回实际确认数
INFO replication | grep -E 'connected_slaves|slave_repl_offset'
# 监控建议:把 WAIT 返回值与超时次数一起采集,持续为 0 立刻告警

参数与返回

项含义注意事项
numreplicas期望确认的从库个数设得比实际副本数大必然超时
timeout毫秒上限,0 表示永久等待0 在不健康拓扑下会挂住客户端
返回值实际确认的从库数量小于期望值即说明未达到可靠性目标
作用范围本连接此前的写命令与全局配置无关,仅影响当前连接
WAIT 能提升可靠性但不改变复制模型本身:它不阻止主库继续接受写入,也不保证从库已执行或落盘,只是让调用方知道有多少副本收到了数据。
超时时间为 0 表示无限等待:从库全部掉线时调用方会一直挂住,业务侧必须设置应用层的读超时并把它当成本次调用失败。

易错点

  • 使用 WAIT 0 永久等待:从库故障时写请求长时间挂起,连接池被耗尽
  • 把 WAIT 当强一致保证:从库接收不等于已执行或已落盘,主库仍可能先于从库故障
  • 对全部写路径都加 WAIT:每次写都要多一轮复制等待,吞吐显著下降,应按业务分级使用
  • 忽略返回值:返回 0 时业务当成功继续处理,实际上没有任何副本确认,可靠性目标并未达成

数据来源与参考

  • Redis 官方文档: WAIT

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌