1.Redis有哪2种持久化方式?分别的优缺点是什么?

Redis 提供了 RDB(快照)和 AOF(日志)两种持久化方式,它们各有千秋:

  1. RDB (Redis DataBase) - 快照模式

    • 原理: 在指定的时间间隔内,将内存中的数据集快照写入磁盘(dump.rdb)。

    • 优点:

      • 恢复快: RDB 文件是紧凑的二进制文件,Redis 加载它来恢复数据非常快。

      • 备份方便: 适合做冷备(如每小时备份一次),文件小,易于传输。

    • 缺点:

      • 数据丢失风险大: 它是“间隔”执行的(如 5 分钟一次),如果 Redis 意外宕机,会丢失最后一次快照之后的所有修改

      • 性能开销: 生成快照需要 fork 子进程,如果数据量巨大,fork 操作可能会阻塞主线程几百毫秒。

  2. AOF (Append Only File) - 日志模式

    • 原理: 将 Redis 执行的每一条写命令记录到日志文件中。

    • 优点:

      • 数据更安全: 可以配置为“每秒刷盘 (appendfsync everysec)”,即使宕机也最多只丢失 1 秒的数据

      • 可读性强: AOF 文件是纯文本协议格式,如果误删了数据(FLUSHALL),只要在重写前手动删掉文件末尾的命令即可恢复。

    • 缺点:

      • 文件体积大: 同样的 Dataset,AOF 文件通常比 RDB 大得多。

      • 恢复慢: 需要像“回放录像”一样重新执行所有命令,启动速度远慢于 RDB。

💡 最佳实践(混合持久化): “在 Redis 4.0 之后,推荐使用混合持久化。它结合了两者优点:AOF 重写时,将当前内存数据以 RDB 格式写入 AOF 文件的开头,后续的增量数据继续以 AOF 格式写入。 这样既保证了启动快(读 RDB),又保证了数据全(补 AOF 日志)。”