Skip to content

一、RDB

在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘等介质上

  • 优点
    • RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能.
    • 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些.
  • 缺点
    • 对数据完整性敏感的业务,RDB的持久化数据相对于AOF稍逊色。即持久化时间配置限定时间内,由于某种原因导致关机情况,那么这段时间内的数据将会被丢失。
    • RDB 需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求.

二、AOF

将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍

  • 优点
    • 使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync;一旦出现故障,最多丢失1秒的数据
    • AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析也很轻松
    • Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写
  • 缺点
    • AOF 文件的体积通常要大于 RDB 文件的体积
    • 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)

最后更新: