1. RDB 持久化的原理和触发方式?

RDB:把内存数据全量快照写入二进制文件 dump.rdb。恢复快、文件紧凑。

原理(fork + 写时复制):BGSAVE 时主进程 fork 子进程,子进程把内存写盘。fork 后父子共享内存页,主进程继续服务;父进程要修改某页时触发写时复制(COW)复制该页。所以:

触发:手动 SAVE(同步阻塞,别用)/ BGSAVE(异步);自动配置 save 3600 1(900 秒内 ≥1 次变更即触发);主从全量复制时主库生成 RDB;正常关闭时。

RDB 配置
# 自动快照条件:任意满足即触发 BGSAVE
save 3600 1        # 900 秒内有 1 次写
save 300 100       # 300 秒内有 10 次写
save 60 10000     # 60 秒内有 1 万次写
stop-writes-on-bgsave-error yes   # 快照失败时拒绝写(保数据安全)
rdbcompression yes

🎯 面试要点

  • RDB 缺点:丢数据窗口——上次快照到故障间的所有写都丢(秒级~分钟级)
  • fork 大实例会卡顿:单机内存别太大(经验 ≤ 10GB 左右),或用云 Redis
  • RDB 适合:数据可容忍分钟级丢失、备份/灾难恢复(紧凑易传)

2. AOF 持久化的原理?三种刷盘策略?

AOF(Append Only File):记录每一条写命令(以 Redis 协议格式追加到 appendonly.aof)。恢复时重放命令。丢数据窗口小。

三种刷盘策略(appendfsync):

AOF 重写(Rewrite):AOF 无限增长 → 自动压缩:子进程把当前数据生成最小命令集(如 100 次 INCR 合并为一条 SET)。重写期间新命令进缓冲区,完成后追加。触发:aof_rewrite_min_size + 上次重写后增长比例(auto-aof-rewrite-percentage 100 默认翻倍触发)。

🎯 面试要点

  • 恢复优先级:AOF 优先于 RDB(AOF 数据更全);启动时自动加载
  • AOF 缺点:文件比 RDB 大、恢复比 RDB 慢(重放命令)
  • aof-load-truncated yes:AOF 尾部损坏时截断加载,不拒绝启动(线上默认开)

3. 混合持久化?生产如何选择?

混合持久化(Redis 4.0,aof-use-rdb-preamble yes):AOF 重写时,前半段用 RDB 二进制格式(全量快照),后半段追加重写期间的增量命令。加载时:先加载 RDB 部分(快),再重放增量(数据全)。兼顾 RDB 的恢复速度和 AOF 的数据完整性,生产推荐。

选择建议:

🎯 面试要点

  • 面试延伸:Redis 作为数据库 vs 缓存的数据安全设计差异
  • 备份策略:每天 RDB + 增量 AOF,异地存放,定期演练恢复

🎤 常见面试追问

  1. RDB 的 fork 会阻塞吗?——fork 瞬间要复制页表(大实例可能阻塞毫秒~秒级);之后子进程写盘不阻塞主进程(写时复制 COW)。大实例慎用 BGSAVE。
  2. AOF 三种刷盘策略怎么选?——everysec(默认):最多丢 1 秒,性能好,生产标配;always:每条 fsync,最安全最慢;no:交 OS,可能丢几秒。
  3. 混合持久化解决什么问题?——RDB 恢复快但丢数据窗口大;AOF 数据全但恢复慢(重放命令)。混合 = RDB 全量 + 增量命令,又快又全(4.0+ 推荐)。
  4. Redis 重启后怎么恢复数据?——启动时检查 AOF 和 RDB:有 AOF 用 AOF(数据更全),否则用 RDB。aof-load-truncated yes 时尾部损坏可截断加载。
  5. 持久化和主从复制是什么关系?——持久化防"进程挂"(本机重启不丢);主从副本防"机器挂"(机器没了还有副本)。两者都要做。

📖 名词解释(本页术语)

术语 大白话解释
RDB(快照)把内存数据全量存成二进制文件(dump.rdb)。恢复快、文件小,但两次快照之间崩溃会丢数据。
AOF(追加日志)记录每条写命令的文件。数据更全(最多丢 1 秒),恢复时重放命令。
fork / 写时复制(COW)BGSAVE 时 fork 子进程干活;父子共享内存页,父进程要改的页才复制——快照期间不影响服务。
AOF 重写AOF 太大时压缩:把当前数据生成最小命令集(100 次 INCR 合并成 1 条 SET)。
fsync把内核缓冲强制刷到磁盘的系统调用——AOF 落盘靠它,刷盘频率决定丢数据窗口。
混合持久化AOF 重写时前半段用 RDB 格式全量、后半段追加增量命令——恢复快且数据全(4.0+ 默认推荐)。
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。