首页/数据/Redis 进阶速查/replica-read-only 与从库可写性
主从与哨兵51 条

replica-read-only 与从库可写性

replica-read-only yes(默认)让从库拒绝写命令;设为 no 可让从库接受本地写入,但这些数据不会同步到主库,重启全量同步时可能被覆盖。

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

从库默认只读的意义

replica-read-only 默认为 yes,从库会拒绝所有写命令并返回 READONLY 错误,这是防止「从库被当成主库写」的第一道保护。把它设为 no 后,从库可以接受本地写入,但这些数据不会同步到主库,其他节点也无从感知。更关键的是:一旦该从库重新执行全量同步(首次同步、积压缓冲不足触发重新同步、被重新挂载等),本地写入的数据会被主库的数据集整体覆盖。

基本信息

默认值replica-read-only yes
改为 no从库接受写入,但不参与复制传播
主要风险全量同步时本地写入被整体覆盖
典型报错READONLY You can't write against a read only replica
适用范围只适合临时缓存类、可随时丢失的数据

典型使用场景

  • 临时在从库上做数据校验时打标记的权宜做法
  • 迁移期把从库当独立实例预热本地缓存,接受可丢
  • 排查 READONLY 报错:确认客户端是否误连了从库
  • 演练「有人误写从库」的后果,用事实验证风险
  • 评估是否应该改用独立实例,而不是让从库承担写入

示例与后果

示例与后果
redis-cli CONFIG GET replica-read-only
redis-cli -h <从库> SET local:cache 1        # 默认返回 READONLY 错误
redis-cli -h <从库> CONFIG SET replica-read-only no
redis-cli -h <从库> INFO replication | grep -E 'role|master_link_status'
# 该从库一旦发生全量同步,上面写入的键会被主库数据集覆盖
redis-cli -h <从库> CONFIG REWRITE           # 用完记得改回并落盘

写入后果对照

场景数据是否保留说明
从库可写并写入保留到下次全量同步不参与复制,主库完全不知情
发生全量同步被覆盖主库数据集整体替换本地数据
旧从库被提升为主库取决于是否被覆盖过数据可能既没同步也没备份
保持只读拒绝写入客户端得到 READONLY 报错
从库可写只适合临时缓存类、可随时重建的数据。把持久业务数据写到从库属于设计错误:它既不在复制链路上,也不会进入基于主库的备份,故障时没有任何可靠的恢复路径。

易错点

  • 在从库写入业务数据后发生主从切换,这批数据既没同步也没备份,直接永久丢失
  • 把从库当独立缓存实例使用,运维上容易与复制拓扑混淆,建议物理隔离或独立部署
  • 客户端误连从库执行写操作,看到 READONLY 报错却去排查主库,方向跑偏
  • 关闭只读保护后忘记改回,长期留下一条绕过复制链路的写入路径

数据来源与参考

  • Redis 官方文档:replication 相关配置(replica-read-only)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌