首页/数据/Redis 进阶速查/READONLY:从节点读数据

READONLY:从节点读数据

集群从节点默认拒绝读请求(会重定向到主节点):客户端发送 READONLY 后可读取本从节点数据(可能略旧),适合读多写少场景分摊压力。

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

让副本承接读流量

集群模式下从节点默认拒绝读请求,并把客户端重定向到负责该槽的主节点。客户端可以显式发送 READONLY,把当前连接标记为允许从从节点读,之后这条连接上的读命令会直接在本节点执行,取到的数据可能略旧。这是集群读写分离的基础机制,用来把只读流量分摊到副本上,减轻主节点压力。

基本信息

命令READONLY 开启,READWRITE 关闭
作用范围连接级标记,不影响其他连接
一致性从副本读可能落后于主节点
前置条件连接必须指向从节点,且该节点在槽覆盖范围内
默认行为不发送该命令时从节点会重定向读请求

典型使用场景

  • 读多写少的业务把查询流量分摊到副本,降低主节点负载
  • 报表或离线分析类读取走副本,避免影响在线写入
  • 演练与压测中验证副本读的延迟与数据新鲜度差异
  • 排查「读到的数据比预期旧」时确认是否走了副本路径
  • 为不同的业务连接区分读写路径,明确各自的一致性口径

使用示例

使用示例
redis-cli -c -p 7000 READONLY        # 本连接允许从副本读
redis-cli -c -p 7000 GET user:1001   # 数据可能略旧,注意业务容忍度
redis-cli -c -p 7000 READWRITE       # 恢复默认行为,读请求重新重定向
redis-cli -c -p 7000 INFO replication | grep role   # 确认目标节点角色

行为对照

连接状态读请求行为适用判断
未标记重定向到主节点默认,一致性最好
已标记为可读副本在本副本执行,可能读到旧值读多写少、可容忍弱一致
连接指向主节点标记无实际影响主节点本来就可读写
连接指向无槽节点仍可能报错检查槽覆盖与节点角色
这个标记是连接级的,连接池场景要保证池内所有连接都被设置,否则同一业务会随连接命中不同节点而表现得时新时旧。
强一致读仍要定向主节点,副本读只适合对数据新鲜度不敏感的查询,写后立即读的场景尤其危险。

易错点

  • 把副本读用于写后立即读的业务,读到旧值导致业务流程判断出错
  • 连接池只设置了部分连接的标记,同一接口的表现随连接命中而波动,难以复现
  • 以为标记后所有读都走本地,忽略键可能不在该节点负责的槽范围内仍会被重定向
  • 在副本上做统计类全量读取,副本延迟升高后反而拖慢了主从同步

数据来源与参考

  • Redis 官方文档:READONLY 命令
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌