目录
[6 持久化](#6 持久化)
[6.1 概述](#6.1 概述)
[6.2 RDB 持久化](#6.2 RDB 持久化)
[6.3 AOF 持久化](#6.3 AOF 持久化)
6 持久化
6.1 概述
- redis高性能的原因
所有数据都存储在了内存中 - 持久化
内存数据易失性(服务重启 / 宕机会丢失全部数据),因此需要将内存数据同步到硬盘,该过程即为Redis 持久化。 - 持久化的方式
Redis 支持两种持久化方案,可单独使用,也可结合使用(生产环境常结合):
- RDB 方式
- AOF 方式
|--------|----------------------------|----------------------------------------------------------|
| 对比维度 | RDB(默认持久化) | AOF(默认关闭) |
| 核心实现原理 | 满足触发条件,对内存 全量数据生成快照 | 每执行写命令, 增量追加命令文本 到文件 |
| 默认开启状态 | 开启(无需手动配置) | 关闭(需配置 appendonly yes 开启) |
| 数据记录形式 | 二进制快照文件(记录 某一时刻全量数据 ) | 文本命令文件(记录 所有修改操作过程 ) |
| 文件相关配置 | 路径 dir 、文件名 dbfilename | 路径 dir (与 RDB 共用)、文件名 appendfilename (默认 appendonly.aof) |
| 数据丢失风险 | 较高,丢失 最后一次快照后 的所有修改数据 | 较低,仅丢失少量(可通过策略优化) |
| 数据恢复逻辑 | 启动时 全量载入 快照文件到内存 | 启动时逐行解析命令, 重新执行还原数据 |
| 恢复速度 | 较快(二进制直接加载,1GB 约 20~30 秒) | 较慢(命令解析执行,文件越大耗时越长) |
6.2 RDB 持久化
- 工作方式
通过快照(snapshotting) 实现,当满足配置的触发条件时,Redis 自动将内存全量数据(指某一时刻 Redis 内存中所有的键值对数据)生成快照,持久化到硬盘中。是 Redis 默认的持久化方式。 - 核心配置
在redis.conf中配置。
-
触发条件
save 秒数 键更改数量
多条件为或关系。
默认配置:

save 900 1:900 秒(15 分钟)内至少 1 个键被修改,触发快照
save 300 10:300 秒(5 分钟)内至少 10 个键被修改,触发快照
save 60 10000:60 秒内至少 10000 个键被修改,触发快照
- 文件配置
存储路径
dir:指定 RDB 快照文件的存储路径
默认配置是dir ./ ,./指的是启动redis时所在的工作目录。


比如,我在/usr/local/redis 目录下启动 Redis 时,dir ./ 这个配置里的 ./ 就会指向当前的工作目录 /usr/local/redis,所以生成的 dump.rdb 和 appendonly.aof 就会直接出现在 bin 目录下。
文件名
dbfilename:指定 RDB 快照文件的名称

- 数据恢复
Redis 启动时,自动读取 RDB 快照文件,将硬盘数据全量载入(指全部载入)到内存;
- 载入速度:
1GB 快照文件(约 1000 万字符串键),耗时 20~30 秒(面试可提及该参考值);
速度受数据量、数据结构、服务器性能影响。
- 缺点
若 Redis异常退出(如宕机、进程被杀),会丢失最后一次快照后所有的修改数据;
解决方案:按需组合配置快照条件,控制数据损失在可接受范围;
若要求数据零丢失,需搭配 / 替换为 AOF 持久化。
6.3 AOF 持久化
- 工作方式
每执行一条修改数据的写命令(如 set、hset、del 等),Redis 都会将该命令以文本形式追加写入到硬盘中的 AOF 文件,实现持久化。
AOF(Append Only File,追加仅文件)持久化,默认不开启。 - 核心配置
在redis.conf中配置。
- 开启 AOF
配置 appendonly yes(默认值为 no,需手动修改开启)

- 文件配置
存储路径
AOF 的文件路径与 RDB 共用dir配置,由 dir 参数指定(无需额外单独配置)。

文件名
默认 appendonly.aof,可通过 appendfilename 参数修改(例:appendfilename my_redis.aof)
