redis的RDB持久化和AOF持久化

关于RDB持久化

RDB 文件用于保存和还原 Redis 服务器所有数据库中的所有键值对数据。

SAVE 命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器。

BGSAVE 命令由子进程执行保存操作,所以该命令不会阻塞服务器。

服务器状态中会保存所有用 save 选项设置的保存条件(redis.conf,save参数),当任意一个保存条件被满足时,服务器会自动执行 BGSAVE 命令。

RDB 文件是一个经过压缩的二进制文件,由多个部分组成。

对于不同类型的键值对, RDB 文件会使用不同的方式来保存它们。

关于AOF持久化

AOF 文件通过保存所有修改数据库的写命令请求来记录服务器的数据库状态。

AOF 文件中的所有命令都以 Redis 命令请求协议的格式保存。

命令请求会先保存到 AOF 缓冲区里面, 之后再定期写入并同步到 AOF 文件。

appendfsync 选项的不同值对 AOF 持久化功能的安全性、以及 Redis 服务器的性能有很大的影响。(redis.conf,appendfsync,有always,everysec,no三个参数,默认为everysec)

服务器只要载入并重新执行保存在 AOF 文件中的命令, 就可以还原数据库本来的状态。

AOF 重写可以产生一个新的 AOF 文件, 这个新的 AOF 文件和原有的 AOF 文件所保存的数据库状态一样, 但体积更小。

AOF 重写是一个有歧义的名字, 该功能是通过读取数据库中的键值对来实现的, 程序无须对现有 AOF 文件进行任何读入、分析或者写入操作。

在执行 BGREWRITEAOF 命令时, Redis 服务器会维护一个 AOF 重写缓冲区, 该缓冲区会在子进程创建新 AOF 文件的期间, 记录服务器执行的所有写命令。 当子进程完成创建新 AOF 文件的工作之后, 服务器会将重写缓冲区中的所有内容追加到新 AOF 文件的末尾, 使得新旧两个 AOF 文件所保存的数据库状态一致。 最后, 服务器用新的 AOF 文件替换旧的 AOF 文件, 以此来完成 AOF 文件重写操作。

内容来自:<redis设计与实现>这本书