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

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. 执行 save 或 bgsave 命令。
  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 同时开启。

发表回复