Redis 持久化是指将内存中的数据持久化到磁盘,以防止服务重启或故障时数据丢失。Redis 提供了两种核心持久化机制:RDB(Redis Database) 和 AOF(Append Only File),而 混合持久化 是 Redis 4.0 引入的一种结合两者优点的持久化方式。
一、RDB 持久化
RDB 是 Redis 默认的持久化方式,它通过生成内存数据的快照(二进制文件) 并保存到磁盘(默认文件为 dump.rdb)来实现持久化。
RDB 还有一个重要的用途,是可以分析Redis数据库里面内存占用分布,也就是分析大KEY,参考我这篇文章。
redis 内存使用率高居高不下,如何分析 key占用情况
1. 工作原理
- 触发方式:
- 手动触发:执行
save命令(阻塞 Redis 主线程,不推荐生产环境)或bgsave命令(fork 子进程处理快照,不阻塞主线程)。 - 自动触发:通过配置文件
redis.conf中的规则自动执行,例如:save 900 1 # 900秒内有1次写操作则触发 save 300 10 # 300秒内有10次写操作则触发 save 60 10000 # 60秒内有10000次写操作则触发
- 手动触发:执行
- 执行流程:
- 子进程(
bgsave时)读取内存数据,生成 RDB 快照文件。 - 快照生成完成后,替换旧的 RDB 文件。
- 子进程(
2. 优缺点
- 优点:
- 文件体积小:RDB 是二进制压缩文件,适合备份和传输。
- 恢复速度快:加载 RDB 文件时直接解析二进制数据,比 AOF 快得多。
- 缺点:
- 数据安全性低:快照是周期性生成的,若在两次快照之间发生故障,这段时间的数据会丢失。
- fork 成本高:
bgsave时 fork 子进程会消耗额外内存(尤其是数据量大时),可能导致短暂阻塞。
二、AOF 持久化
AOF 持久化通过记录所有写操作命令(如 set、hmset 等) 到日志文件(默认 appendonly.aof),Redis 重启时通过重新执行这些命令恢复数据。

1. 工作原理
- 开启方式:在
redis.conf中配置appendonly yes启用 AOF。 - 命令记录:每执行一次写操作,命令会被追加到 AOF 缓冲区,再根据同步策略写入磁盘。
- 同步策略(
appendfsync配置):always:每次写操作立即同步到磁盘(安全性最高,但性能最差)。everysec:每秒同步一次(默认,平衡安全性和性能,最多丢失1秒数据)。no:由操作系统决定何时同步(性能最好,但安全性最低)。
- AOF 重写:AOF 文件会随命令增多而变大,Redis 会通过
bgrewriteaof命令(或自动触发)重写 AOF,去除冗余命令(如多次修改同一 key 的命令合并为最终结果),减小文件体积。
2. 优缺点
- 优点:
- 数据安全性高:可通过同步策略控制数据丢失量(默认最多丢失1秒数据)。
- 文件可读性强:AOF 是文本文件,可直接查看或编辑命令。
- 缺点:
- 文件体积大:即使经过重写,AOF 文件通常也比 RDB 大。
- 恢复速度慢:加载时需要重新执行所有命令,耗时较长。
三、混合持久化
混合持久化(Redis 4.0 引入)结合了 RDB 和 AOF 的优点,在 AOF 重写时,将数据以 RDB 格式写入 AOF 文件开头,后续追加增量的 AOF 命令。
1. 工作原理
- 开启方式:在
redis.conf中配置aof-use-rdb-preamble yes(Redis 5.0 后默认开启)。 - 文件结构:AOF 文件分为两部分:
- 开头:RDB 格式的全量数据快照。
- 后续:重写后新增的 AOF 命令(增量数据)。
- 恢复流程:加载时先解析 RDB 部分恢复全量数据,再执行后续 AOF 命令恢复增量数据。
2. 优缺点
- 优点:
- 恢复速度快:比纯 AOF 快(开头是 RDB 快照)。
- 数据安全性高:增量部分用 AOF 记录,数据丢失少。
- 文件体积适中:比纯 AOF 小,比 RDB 灵活。
- 缺点:
- 兼容性稍差:老版本 Redis(4.0 前)不支持混合持久化的 AOF 文件。
四、总结对比
| 特性 | RDB | AOF | 混合持久化 |
|---|---|---|---|
| 数据安全性 | 低(可能丢失大量数据) | 高(最多丢失1秒数据) | 高(结合两者优势) |
| 恢复速度 | 快(二进制解析) | 慢(重放命令) | 较快(RDB+增量AOF) |
| 文件体积 | 小 | 大 | 中等 |
| 适用场景 | 备份、容忍数据丢失 | 高安全性要求 | 平衡速度与安全性 |
实际使用中,可根据业务对数据安全性和性能的要求选择:
- 若追求速度和备份便捷性,选 RDB;
- 若要求高数据安全性,选 AOF;
- 若想平衡两者,优先启用混合持久化。
揭秘Redis三种持久化机制
9291

被折叠的 条评论
为什么被折叠?



