【Redis 探秘】Redis 持久化机制:RDB 与 AOF
👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主
⛪️ 个人社区:个人社区
💞 个人主页:个人主页
🙉 专栏地址: ✅ Java 中级
🙉八股文专题:剑指大厂,手撕 Java 八股文
文章目录
- Redis 持久化机制:RDB 与 AOF
- 1.1 RDB(Redis Database Backup)
- 1.1.1 工作原理
- 1.1.2 优缺点
- 1.1.3 配置示例
- 1.2 AOF(Append Only File)
- 1.2.1 工作原理
- 1.2.2 优缺点
- 1.2.3 配置示例
- 1.3 RDB 和 AOF 的结合使用
- 1.3.1 配置示例
- 1.4.总结
Redis 持久化机制:RDB 与 AOF
Redis 提供了两种主要的持久化机制:RDB(Redis Database Backup)和 AOF(Append Only File)。这两种机制各有特点,适用于不同的场景。下面详细介绍这两种持久化机制的工作原理、优缺点以及配置方法。
1.1 RDB(Redis Database Backup)
1.1.1 工作原理
- 快照:RDB 是通过创建数据集的时间点快照(snapshot)来实现持久化的。Redis 会定期将内存中的数据集写入到一个二进制文件(默认为
dump.rdb
)中。 - 触发条件:
- 手动触发:通过
SAVE
或BGSAVE
命令手动触发快照。 - 自动触发:通过配置
save
参数,设置在特定条件下自动触发快照。例如:save 900 1 # 900秒内至少有1个key发生变化 save 300 10 # 300秒内至少有10个key发生变化 save 60 10000 # 60秒内至少有10000个key发生变化
- 手动触发:通过
1.1.2 优缺点
-
优点:
- 恢复速度快:RDB 文件是一个紧凑的二进制文件,恢复速度较快。
- 文件体积小:RDB 文件体积较小,适合备份和传输。
- 配置简单:配置和管理相对简单。
-
缺点:
- 数据丢失风险:如果 Redis 服务器在两次快照之间发生故障,可能会丢失这段时间内的数据。
- 阻塞风险:
SAVE
命令会阻塞 Redis 服务器,直到快照完成。BGSAVE
命令会在后台执行,但仍然会占用一定的资源。
1.1.3 配置示例
# 开启 RDB 持久化
save 900 1
save 300 10
save 60 10000
# RDB 文件名
dbfilename dump.rdb
# RDB 文件存储路径
dir /var/lib/redis
1.2 AOF(Append Only File)
1.2.1 工作原理
- 追加日志:AOF 通过记录服务器接收到的每个写操作命令,将这些命令以追加的方式写入到一个日志文件(默认为
appendonly.aof
)中。 - 重写机制:为了防止 AOF 文件过大,Redis 提供了重写机制(
BGREWRITEAOF
),将 AOF 文件中的命令进行优化和压缩,生成一个新的 AOF 文件。 - 同步策略:
- always:每次写操作都同步到磁盘,最安全但性能最低。
- everysec:每秒同步一次,平衡了安全性和性能。
- no:不主动同步,依赖操作系统进行同步,性能最高但安全性最低。
1.2.2 优缺点
-
优点:
- 数据安全性高:AOF 模式可以记录每一个写操作,即使 Redis 服务器突然宕机,也能恢复到最近的状态。
- 灵活性高:可以通过配置不同的同步策略,平衡安全性和性能。
-
缺点:
- 恢复速度慢:AOF 文件较大,恢复速度相对较慢。
- 文件体积大:AOF 文件记录了所有的写操作,文件体积较大,需要定期进行重写。
- 配置复杂:相对于 RDB,AOF 的配置和管理较为复杂。
1.2.3 配置示例
# 开启 AOF 持久化
appendonly yes
# AOF 文件名
appendfilename "appendonly.aof"
# 同步策略
appendfsync everysec
# AOF 重写条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
1.3 RDB 和 AOF 的结合使用
为了兼顾数据的安全性和恢复速度,Redis 支持同时使用 RDB 和 AOF 持久化机制。这样可以在 RDB 提供的快速恢复和 AOF 提供的数据安全性之间找到平衡。
1.3.1 配置示例
# 开启 RDB 持久化
save 900 1
save 300 10
save 60 10000
# RDB 文件名
dbfilename dump.rdb
# RDB 文件存储路径
dir /var/lib/redis
# 开启 AOF 持久化
appendonly yes
# AOF 文件名
appendfilename "appendonly.aof"
# 同步策略
appendfsync everysec
# AOF 重写条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
1.4.总结
- RDB:通过创建数据集的时间点快照来实现持久化,恢复速度快,文件体积小,但存在数据丢失风险。
- AOF:通过记录每个写操作命令来实现持久化,数据安全性高,但恢复速度慢,文件体积大。
- 结合使用:同时使用 RDB 和 AOF 持久化机制,可以在数据的安全性和恢复速度之间找到平衡。
精彩专栏推荐订阅:在下方专栏👇🏻
✅ 2023年华为OD机试真题(A卷&B卷)+ 面试指导
✅ 精选100套 Java 项目案例
✅ 面试需要避开的坑(活动)
✅ 你找不到的核心代码
✅ 带你手撕 Spring
✅ Java 初阶