Redis 持久化方案

Redis 中提供了不同的持久化选项:

  • RDB 会定时地保存数据集快照;
  • AOF 记录下服务器收到的每一条“写”操作,并在服务启动时通过依次执行这些操作重建数据集。AOF 文件过大时,Redis 会对其重写;
  • 可以关闭持久化功能,使数据仅保存在内存中;
  • 同时开启 RDBAOF 。服务重启时会使用 AOF 重建数据。

RDB 优点:

  • 单文件存储,适合按时间点做不同版本的数据备份,同时也适合做灾难恢复;
  • 提供更好的性能,父进程不进行IO操作,而是fork子进程完成;
  • 数据集很大时相比 AOF 其启动速度更快。

RDB 缺点:

  • 由于是按时间周期保存的,意外宕机会导致最近时间点内的数据丢失;
  • 数据量过大时,fork操作可能占用大量系统资源导致服务短暂阻塞(几毫秒甚至一秒);

AOF 优点:

  • 默认每秒同步一次(fsync 策略),因此只会意外丢失一秒内的数据;
  • AOF 记录是 append only 的,不怕意外宕机。即使只写了一半操作也很容易使用 redis-check-aof 工具恢复;
  • AOF 文件过大时,Redis 会自动在后台进行重写。
  • AOF 文件依次保存了所有的操作记录,它很容易理解或解析。

AOF 缺点:

  • 相同数据时,AOF 通常比 RDB 文件更大;
  • 不同的 fsync 策略可能导致 AOF 比 RDB 慢;
  • 因为是重新执行命令来恢复数据,某些命令可能导致很罕见的 Bug,而这类 Bug 在 RDB 中不会存在。
若是喜欢这篇文章,可以随便给个赏钱:)