首页/数据/Redis 进阶速查/replica-serve-stale-data:断链时的读服务
主从与哨兵51 条

replica-serve-stale-data:断链时的读服务

从库与主库断链时,replica-serve-stale-data yes(默认)允许继续用旧数据响应读请求,no 则除 INFO 等少数命令外全部返回错误。

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

断链时还能不能读

从库与主库断链之后,默认仍然会用本地已有的旧数据响应读请求,客户端拿到的是过期数据但服务不中断。把这个配置改成不允许之后,除少量管理类命令以外,断链期间的读请求会直接返回错误,避免脏读但可用性随之下降。选哪一种取决于业务对过期数据和直接报错这两个后果的容忍度。

基本信息

默认行为允许用本地旧数据继续服务读请求
改为拒绝断链期间大部分命令直接返回错误
折中方案业务先探测链路状态再决定是否读从库
判断依据复制链路状态字段
影响范围主从切换窗口内从库读请求的表现

典型使用场景

  • 读多写少且能容忍短暂过期的业务,保持默认让服务更平滑
  • 涉及金额或权限判断的读取,宁可报错也不要返回过期数据
  • 主从切换窗口内需要明确从库读的行为,避免业务侧出现难以解释的旧值
  • 排查「读到的数据明显过期」问题时确认该配置的取值
  • 为读写分离架构设计降级策略时,明确断链情况下的降级动作

查看与调整

查看与调整
redis-cli CONFIG GET replica-serve-stale-data
redis-cli INFO replication | grep -E 'master_link_status|master_last_io_seconds_ago'
redis-cli CONFIG SET replica-serve-stale-data no   # 宁可不服务也不返回旧数据
redis-cli CONFIG SET replica-serve-stale-data yes  # 恢复默认,保可用性
redis-cli CONFIG REWRITE

取值对照

取值断链期间行为适用判断
允许(默认)继续用旧数据响应读请求可容忍过期,优先保证可用性
拒绝大部分读请求直接报错数据新鲜度优先,可接受报错
业务侧探测后降级按链路状态决定是否读从库需要精细控制时的折中做法
改成拒绝之后,主从切换窗口内的从库读会全部失败,业务侧的重试与降级逻辑必须同步准备好。
多数缓存场景保留默认更平滑:短暂读到旧值对业务影响有限,而整体读失败会直接变成可用性事故。

易错点

  • 把断链从库返回的数据当作最新结果使用,业务做出基于旧值的错误判断
  • 改成拒绝读却没有配套降级逻辑,主从切换窗口内读请求大面积报错
  • 只改了运行时配置忘记写回文件,重启后行为反转,问题在故障时才暴露
  • 读从库前不检查链路状态,把偶发的过期读取当成数据一致性问题长期排查

数据来源与参考

  • Redis 官方文档:replica-serve-stale-data 配置说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌