分享技术 · 探索极限 · Code is Art
数据库 发布 2022-07-15 893 阅读 约 3 分钟阅读

Redis 数据持久化:RDB 与 AOF

系统梳理 Redis RDB 与 AOF 两种持久化机制,包括配置项、触发方式、恢复流程、优缺点和适用场景。

Redis 有两种持久化方案:RDB(Redis DataBase)和 AOF(Append Only File)。

RDB 详解

RDB 是 Redis 默认的持久化方案。在指定的时间间隔内执行指定次数的写操作,就会将内存中的数据写入磁盘,在指定目录下生成 dump.rdb 文件。Redis 重启时会通过加载 dump.rdb 恢复数据。

从配置文件了解 RDB

打开 redis.conf 文件,可以看到 RDB 的核心规则配置:

save 900 1
save 300 10
save 60 10000

指定本地数据库文件名,一般采用默认的 dump.rdb

dbfilename dump.rdb

指定本地数据库存放目录。

dir ./

配置存储到本地数据库时是否压缩数据,默认是 yes。

rdbcompression yes

触发 RDB 快照

  1. 在指定时间间隔内,执行指定次数的写操作。
  2. 执行 savebgsave 命令。
  3. 执行 flushall 命令。
  4. 执行 shutdown 命令。

通过 RDB 文件恢复数据

dump.rdb 文件拷贝到 Redis 数据目录下,重启 Redis 服务即可。

RDB 的优缺点

优点:适合大规模数据恢复;如果业务对数据完整性和一致性要求不高,RDB 是不错的选择。

缺点:数据完整性和一致性不如 AOF;备份时 Redis 会 fork 子进程,可能带来额外内存占用。

AOF 详解

AOF 默认不开启。它通过日志追加的方式记录每个写操作,Redis 重启时根据日志内容重新执行写指令完成数据恢复。

从配置文件了解 AOF

开启 AOF:

appendonly yes

指定 AOF 文件名:

appendfilename "appendonly.aof"

指定更新日志条件:

appendfsync everysec

配置 AOF 重写触发机制:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

根据 AOF 文件恢复数据

正常情况下,将 appendonly.aof 文件拷贝到 Redis 数据目录下,重启 Redis 服务即可。

如果 AOF 文件格式异常,可以通过命令修复:

redis-check-aof --fix appendonly.aof

AOF 重写机制

AOF 会把写操作追加到文件中,文件冗余内容会越来越多。当 AOF 文件大小超过设定阈值时,Redis 会 fork 新进程读取内存中的数据,并重新写入临时文件,最后替换旧的 AOF 文件。

总结

  1. Redis 默认开启 RDB 持久化。
  2. RDB 适合大规模恢复,但数据完整性相对较弱。
  3. AOF 需要手动开启,默认推荐每秒异步记录一次。
  4. AOF 数据完整性更高,但文件更大、恢复更慢。
  5. 如果 Redis 只是缓存,可以关闭持久化;如果需要持久化,建议 RDB 和 AOF 同时开启。

发表回复