Skip to content

RDB和AOF的区别是什么

RDB(Redis Database Backup) 和 AOF(Append Only File) 是 Redis 的两种数据持久化方式。RDB 是快照方式,定期将内存数据保存为二进制文件,恢复快但可能丢失数据;AOF 是日志方式,记录每次写操作,数据完整性高但文件大、恢复慢。

关键区别

1. 持久化方式

  • RDB
    • 快照:某个时间点的内存数据全量保存为 .rdb 文件。
    • 示例:SAVE 或 BGSAVE 生成快照。
  • AOF
    • 增量日志:记录每条写命令(如 SET key value),追加到 .aof 文件。
    • 示例:每次写操作追加日志。

2. 数据完整性

  • RDB
    • 间隔保存,可能丢失最后一次快照后的数据。
    • 示例:每 5 分钟保存,宕机丢失 5 分钟数据。
  • AOF
    • 实时记录操作,数据丢失少(取决于同步策略)。
    • 示例:每秒同步,丢失最多 1 秒数据。

3. 文件大小

  • RDB
    • 二进制压缩,文件小。
    • 示例:100MB 数据生成 20MB RDB 文件。
  • AOF
    • 纯文本日志,文件随操作增多变大。
    • 示例:100MB 数据可能生成 200MB AOF 文件。

4. 恢复速度

  • RDB
    • 直接加载内存,恢复快。
    • 示例:重启加载 100MB 数据,秒级完成。
  • AOF
    • 重放所有命令,恢复慢。
    • 示例:重放百万条命令,分钟级。

5. 性能影响

  • RDB
    • 快照时 fork 子进程(BGSAVE),短暂影响主线程。
  • AOF
    • 写日志影响性能,同步策略(always、everysec)加重负担。

延伸与面试角度

  • 为什么两种方式?
    • RDB:适合冷备、快速恢复。
    • AOF:适合高一致性需求。
  • 优化
    • RDB:BGSAVE 后台执行,减少阻塞。
    • AOF:重写(BGREWRITEAOF)压缩日志,解决文件过大。
  • 结合使用
    • 默认开启 RDB,AOF 可选。
    • 先加载 AOF(更完整),无 AOF 则用 RDB。
  • 性能对比
    • RDB 写快读快,AOF 写慢读慢。
  • 实际应用
    • RDB:缓存数据,允许少量丢失。
    • AOF:订单系统,需高一致性。
  • 面试点
    • 问“丢失数据场景”时,提快照间隔 vs 同步频率。
    • 问“恢复原理”时,提加载 vs 重放。

总结

RDB 是快照,体积小、恢复快但可能丢数据;AOF 是日志,完整性高但文件大、恢复慢。区别在方式、完整性、大小、速度和性能影响上。面试时,可结合配置示例或优缺点分析,展示 Redis 持久化理解。