Redis突然挂了,数据丢了多少?就看你用RDB还是AOF

发布于:2025-09-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

图片

技术解析

RDB 和 AOF 是Redis提供给你的两种选择。你可以只选择其中一种,也可以同时开启两者,以获得更高级别的保障。

1. RDB (Redis Database) - “快照”模式

  • • 工作原理: RDB是Redis默认的持久化方式。它在指定的时间间隔内,会执行一个“快照”操作,将内存中的所有数据以一种紧凑的二进制格式写入到磁盘上的一个.rdb文件中。

  • • 配置示例:
    # 设置快照规则:900秒内有1次写入,或300秒内有10次写入,或60秒内有10000次写入,则执行快照
    save 900 1
    save 300 10
    save 60 10000
    
    # 开启后台快照模式。Redis会 fork 一个子进程进行快照,不阻塞主进程
    stop-writes-on-bgsave-error yes
  • • 优点:

    • • 文件小,恢复快.rdb文件是经过压缩的二进制文件,非常紧凑,适合用于备份和快速恢复。

    • • 性能高fork子进程进行快照,对Redis主进程的性能影响最小,因为它只需做少量的I/O操作。

  • • 缺点:

    • • 数据有丢失风险: 由于快照不是实时进行的,如果在两次快照之间Redis意外宕机,那么这段时间的数据会永久丢失。

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

  • • 工作原理: AOF持久化以日志的形式,记录Redis执行过的每一个写操作命令。当Redis重启时,它会重新执行AOF文件中的所有命令来恢复数据。

  • • 配置示例:
    # 开启AOF持久化
    appendonly yes
    
    # 设置AOF文件的同步策略
    # everysec:每秒同步一次,性能和数据安全性兼顾 (常用)
    # always:每次写入都同步,最安全但性能差
    # no:不同步,由操作系统决定,最不安全
    appendfsync everysec
  • • 优点:

    • • 数据安全性高: 可以设置成每秒同步一次(everysec),最多只会丢失一秒的数据。

    • • 日志可读: AOF文件记录的是命令,是纯文本,易于理解和恢复。

  • • 缺点:

    • • 文件大,恢复慢: AOF文件记录了所有操作,文件会比RDB文件大得多,恢复数据时需要重新执行所有命令,耗时更长。

如何选择?

  • • RDB 适合用于灾难恢复,因为它快,文件小。你可以定期将RDB文件备份到远程。

  • • AOF 适合用于实时数据备份,因为它安全性高。

  • • 最佳实践: 结合使用。开启RDB进行周期性的全量备份,同时开启AOF进行秒级增量备份。在Redis重启时,会优先使用AOF文件进行恢复。


故事场景:大厨的“独门菜谱”

你(Redis)是一位米其林三星大厨,你所有的烹饪秘诀都记录在一本厚厚的菜谱(内存数据)里。为了防止你的菜谱因意外丢失,你需要进行备份。

方式一:RDB — “定时拍照存档”

这是一种追求效率,但有风险的备份方式。

  • • 工作流程:
    你觉得做菜不能被打断,所以你不会实时地记录你的每个操作。相反,你设置了一个“定时拍照”的智能相机BGSAVE命令)。

    • • 比如,你设定它每隔30分钟,就对你的菜谱拍一张完整的照片,然后将这张照片压缩,存放在保险柜(磁盘)里。

  • • 优点:

    • • 速度快: 拍照过程非常快,不影响你做菜。备份出来的照片文件很小,可以轻松地上传到云端。

    • • 恢复快: 如果菜谱真的丢失了,你只需要从保险柜里取出最近的一张照片,就能快速地重现你的菜谱。

  • • 缺点:

    • • 风险: 假如你在拍照后,又花了29分钟创造了一道新菜,然后厨房突然着火了(服务器宕机)。等你重开厨房,你只能从30分钟前的那张照片恢复。你最新创造的这29分钟的新菜谱,永远地丢失了

方式二:AOF — “每写一步,都记到日志”

这是一种追求极致安全,但有代价的备份方式。

  • • 工作流程:
    你雇佣了一位专业的速记员。你告诉他:“我做的每一个操作,无论大小,你都必须用文字记录下来。”

    • • 每当你往菜谱里加一个新配料,或者改动一个步骤,速记员都会在旁边的一本日志本(AOF文件)上,用文字详细地记下来:“步骤一:加入3克盐。步骤二:翻炒10秒...”。

  • • 优点:

    • • 安全:你可以让速记员每秒钟都向保险柜同步一次日志。即使厨房立刻着火,你最多只会丢失一秒钟的日志,安全性极高。

    • • 可读性强:日志是文字,你可以随时拿出来,看清楚你每一步都做了什么。

  • • 缺点:

    • • 日志多,恢复慢: 这本日志本会记录你的每一个操作,很快就会变得比菜谱本身还要厚。如果菜谱丢了,你要恢复时,需要让一个学徒(Redis恢复进程)把这本日志从头到尾,每一个操作都重新做一遍。这会非常耗时。

故事总结:

持久化方式

RDB (定时拍照) AOF (操作日志)
工作原理 全量快照

,拍照片

增量日志

,记命令

文件大小

,二进制压缩

,记录所有操作

恢复速度

 (直接载入)

 (重新执行所有命令)

数据安全性 有丢失风险

 (两次快照之间的数据)

 (可实现秒级恢复)

核心比喻 每隔一段时间对菜谱拍张照 每写一步,都记到日志本上

最终建议:
大厨最终决定,他要把两种方法结合起来用:

“每天早上营业前,用相机拍一张菜谱的完整照片,然后平时做菜时,让速记员在一旁持续记录。这样,即使发生了意外,我最多也只丢失当天工作的一部分,而不会丢失全部。”

这正是Redis的最佳实践。


网站公告

今日签到

点亮在社区的每一天
去签到