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 持久化理解。