You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免用户从Redis只读从节点读取到未同步的过期数据?

Redis主从复制读取一致性问题解答

你已明确的基础规则整理如下:

  • 默认情况下从节点为只读模式
  • 所有写操作都必须在主节点执行
  • 主节点将变更写入内部缓冲区后,再将变更同步给从节点
  • 从节点接收到缓冲区的变更信息后,写入自身内存

问题结论

会读取到未同步的旧数据

原因说明

Redis默认采用异步主从复制机制,主节点完成本地写入、将变更写入缓冲区后就会向写请求方返回成功,不会阻塞等待从节点完成同步。主节点向从节点同步变更、从节点执行变更写入内存的整个过程存在毫秒级到秒级不等的延迟,延迟大小受网络带宽、服务器负载、同步数据量等因素影响。

你提到的场景中,在从节点接收到name键的变更指令并完成本地更新之前,从节点内存中存储的仍然是旧值rishi,此时发到从节点的读请求会直接返回本地存储的旧值,出现短时间的主从数据不一致。

如果业务对数据一致性要求极高,无法容忍这种不一致,可以使用Redis提供的WAIT命令,强制要求写操作等待指定数量的从节点完成同步后再返回成功,但该方案会显著增加写操作的耗时,需要结合业务场景权衡使用。

内容的提问来源于stack exchange,提问作者Rishi Prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:24:04