RDB vs AOF

Redis 的数据保存在内存中,为保证数据不会因为宕机等故障而全部丢失,Redis 提供了持久化机制

Redis 提供了两种持久化机制:

RDB

RDB 持久化是将某个时间点的 Redis 数据保存到一个 RDB 文件中,该文件是一个经过压缩的二进制文件,通过该文件可以还原生成 RDB 文件时 Redis 中的数据,Redis 提供了 2 个命令来创建 RDB 文件:

BGSAVE 命令仅在 fork 进程的时候阻塞,生成数据文件时不阻塞,推荐使用

载入 RDB 文件

Redis 载入 RDB 文件并没有专门的命令,是在 Redis 服务器启动时自动执行的,但 Redis 是否会载入 RDB 文件还取决于 Redis 是否开启了 AOF 持久化功能,具体逻辑为:

  1. 如果服务器开启了 AOF 持久化功能,服务器优先使用 AOF 文件来还原数据
  2. 如果服务器未开启 AOF 持久化功能,服务器才会使用 RDB 文件来还原数据

AOF

AOF 持久化是通过保存 Redis 服务器所执行的写命令来记录数据的,默认情况下 AOF 持久化功能是关闭的,需要修改配置进行开启

载入 AOF 文件

因为 AOF 文件中包含了重建数据所需的所有写命令,所以 Redis 服务器只要读入并重新执行一遍 AOF 文件里面保存的写命令,就可还原 Redis 服务器之前的数据

Redis 读取 AOF 文件并还原数据的步骤为:

  1. Redis 命令只能在客户端的上下文中执行,所以先创建一个不带网络的伪客户端
  2. 从 AOF 文件中分析并读取出一条写命令
  3. 使用伪客户端执行读取出的写命令
  4. 循环执行步骤 2 和 3,直到 AOF 中所有命令都执行完

两者区别

- RDB AOF
实现方式 存储某个时间点 Redis 中的全部数据到 RDB 文件 记录 Redis 执行的所有写命令到 AOF 文件
文件体积 RDB 记录的是结果,体积小 AOF 记录的是过程,体积大
Redis 提供了重写功能来解决文件体积过大的问题
安全性 低,会丢失上次 RDB 持久化后写入的数据 高,最多丢失 1s 内写入的数据
优先级 AOF 未开启时执行 优先执行

两者优缺点

RDB

优点:

缺点:

AOF

优点:

缺点: