首页/数据/Redis 进阶速查/从库无盘加载
主从与哨兵51 条

从库无盘加载

repl-diskless-load 控制从库接收全量同步数据时是否直接写入内存(或先写盘再加载):内存充足时用 swapdb 加速,内存紧张时保持落盘模式。

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

从库无盘加载

从库做全量同步时,默认路径是先把主库传来的 RDB 落到磁盘,再从磁盘加载进内存。repl-diskless-load 允许直接读入内存,省掉一次磁盘往返;代价是加载期间旧数据与新数据会同时占用内存,可用内存算不过来就会出大问题。

基本信息

取值disabled / on-empty-db / swapdb
默认值disabled,即先落盘再加载
收益免去磁盘往返,全量同步更快
成本加载期间内存占用接近双份

典型使用场景

  • 从库磁盘性能受限(云盘 IOPS 低)时缩短全量同步时间
  • 从库磁盘空间紧张,不想再落一份完整 RDB
  • 希望同步期间从库仍能对外提供旧数据(swapdb 模式)
  • 演练全量同步耗时,比较不同模式的实际差异
  • 内存富余但对磁盘 IO 敏感的实例做同步优化

配置与观察

配置与观察
# 查看当前策略:disabled 表示仍旧先落盘再加载
redis-cli CONFIG GET repl-diskless-load
# on-empty-db:从库为空时直接读进内存
redis-cli CONFIG SET repl-diskless-load on-empty-db
# swapdb:加载期保留旧数据可读,加载完成后再原子切换
redis-cli CONFIG SET repl-diskless-load swapdb
# 全量同步过程与链路状态
redis-cli INFO replication | grep -E 'master_link_status|master_sync_in_progress'

取值对照

取值行为内存代价
disabled先落盘再加载低,仅需额外磁盘空间
on-empty-db库为空时无盘加载,否则仍落盘加载期接近双份内存
swapdb无盘加载并保留旧数据对外服务最高,新旧两份同时在内存
master_sync_in_progress是否正在全量同步为 1 时不要重启从库
master_link_status与主库的链路状态down 表示同步未完成或已断开
swapdb 的价值在于加载期间旧数据仍可读、加载完成后一次原子切换;如果业务能接受从库短暂不可读,这个模式带来的双份内存压力就没有必要承担。
内存余量不足时开启无盘加载,可能把从库直接推到 OOM 或被系统杀掉;先按数据集大小核算可用内存,再决定是否固化为配置。

易错点

  • 内存余量不足就开无盘加载 → 加载期内存翻倍触发 OOM,从库进程被杀 → 先核算余量,必要时保持默认落盘模式
  • 只关注加载更快,忽略磁盘空间需求 → 落盘模式下需要预留 RDB 大小加峰值增长空间 → 容量规划时把快照文件一起算进去
  • 全量同步进行中重启从库 → 同步作废并可能再触发一轮全量,放大主库压力 → 先看 master_sync_in_progress 再操作
  • 只在个别从库改了配置 → 扩容出来的新从库仍是默认行为,故障时表现不一致 → 同步参数纳入统一模板管理

数据来源与参考

  • Redis 官方文档:repl-diskless-load 配置说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌