Redis持久化的两种方式

Sylphia 发布于 2026-06-17 110 次阅读


一、Redis 持久化是什么?

Redis 是一个基于内存的数据库,数据主要存放在内存中。

内存的特点是读写速度快,但是一旦服务器重启、Redis 进程异常退出,内存中的数据就可能丢失。

为了解决这个问题,Redis 提供了持久化机制,可以把内存中的数据保存到磁盘上。

Redis 常见的持久化方式主要有两种:

  • RDB
  • AOF

它们的目的都是防止 Redis 重启后数据全部丢失,但是实现方式不一样。

二、RDB 是什么?

RDB,全称是 Redis Database。

它的核心思想是:在某一个时间点,把 Redis 内存中的数据整体保存成一个快照文件。

可以简单理解为:

RDB 就是定期给 Redis 内存拍一张照片。

比如 Redis 当前有这些数据:

name = 张三
age = 18
count = 100

Redis 会在某个时间点,把这些数据保存到一个 RDB 文件中。

当 Redis 重启时,就可以读取这个 RDB 文件,把数据恢复到内存中。

三、AOF 是什么?

AOF,全称是 Append Only File。

它的核心思想不是保存某一刻的完整数据,而是把 Redis 执行过的写命令记录下来。

可以简单理解为:

AOF 就是把每一次修改 Redis 数据的命令都记到日志里。

比如执行了下面这些命令:

SET name 张三
SET age 18
INCR count

AOF 文件中就会记录这些写命令。

当 Redis 重启时,会重新执行 AOF 文件中的命令,从而把数据恢复出来。

四、RDB 和 AOF 的核心区别

对比项RDBAOF
保存方式保存某一时刻的数据快照保存每一次写操作命令
文件内容二进制快照文件Redis 写命令日志
恢复速度较快相对较慢
数据安全性可能丢失最近一段时间的数据数据丢失更少
文件体积通常较小通常较大
性能影响相对较小略大一些
适合场景备份、快速恢复对数据安全要求较高的场景

五、RDB 的数据恢复过程

假设 Redis 配置了每 5 分钟生成一次 RDB 快照。

时间线如下:

10:00 生成 RDB 快照
10:01 写入数据 A
10:02 写入数据 B
10:03 Redis 宕机

Redis 重启之后,只能根据 10:00 生成的 RDB 文件进行恢复。

也就是说,10:01 到 10:03 之间写入的数据,可能会丢失。

所以 RDB 最大的问题就是:如果 Redis 还没来得及生成新的快照就宕机了,那么最近一段时间的数据可能无法恢复。

六、AOF 的数据恢复过程

AOF 是通过记录写命令来恢复数据的。

比如执行了下面这些命令:

SET name 张三
SET age 18
INCR count

AOF 文件会把这些写命令追加保存下来。

Redis 重启时,会从头到尾重新执行这些命令,最终恢复出宕机前的数据状态。

AOF 常见的刷盘策略有三种:

appendfsync always
appendfsync everysec
appendfsync no

其中最常用的是:

appendfsync everysec

这个配置表示每秒把 AOF 日志同步到磁盘一次。

这种方式在性能和数据安全之间做了一个比较好的平衡。正常情况下,即使 Redis 宕机,也最多丢失最近 1 秒左右的数据。

七、RDB 的优缺点

1、RDB 的优点

  • RDB 文件通常比较小,适合做备份。
  • Redis 重启恢复速度比较快。
  • 对 Redis 正常读写性能影响相对较小。

2、RDB 的缺点

  • 可能会丢失最近一段时间的数据。
  • 如果数据量很大,生成快照时也会产生一定的资源消耗。

八、AOF 的优缺点

1、AOF 的优点

  • 数据安全性更高。
  • 可以做到最多只丢失最近 1 秒左右的数据。
  • AOF 文件是命令日志,可读性比 RDB 更强。

2、AOF 的缺点

  • AOF 文件通常比 RDB 文件更大。
  • Redis 重启时需要重新执行命令,恢复速度可能比 RDB 慢。
  • 每次写操作都要追加日志,对性能有一定影响。

九、AOF 文件会不会越来越大?

AOF 文件会随着写命令越来越多而不断变大。

比如多次修改同一个 key:

SET name 张三
SET name 李四
SET name 王五

实际上,Redis 最终只需要保留最后的结果:

SET name 王五

但是在没有处理之前,AOF 文件中可能会记录多条历史命令。

为了解决这个问题,Redis 提供了 AOF 重写机制。

AOF 重写并不是简单地压缩原来的 AOF 文件,而是根据 Redis 当前内存中的数据状态,重新生成一份更简洁的 AOF 文件。

比如原来有三条命令:

SET name 张三
SET name 李四
SET name 王五

重写之后可能只保留一条:

SET name 王五

这样 AOF 文件就会变小,Redis 重启恢复时执行的命令也会减少。

十、总结

RDB 和 AOF 都是 Redis 的持久化方式。

RDB 是定期生成数据快照,优点是文件小、恢复快,缺点是可能丢失最近一段时间的数据。

AOF 是记录每一次写命令,优点是数据更安全,缺点是文件大、恢复相对慢一些。

此作者没有提供个人介绍。
最后更新于 2026-06-17