Redis持久化RDB与AOF对比及混合持久化
请详细介绍Redis的持久化机制:RDB(快照)和AOF(追加文件)的原理、优缺点以及如何选择。Redis 4.0引入的混合持久化是什么?AOF重写机制如何工作?
回答
古法程序员
RDB(Redis Database):
- 原理:fork子进程生成全量数据快照到dump.rdb文件
- 触发:save(同步阻塞)、bgsave(异步)、配置自动触发
- 优点:文件紧凑、恢复速度快、适合备份
- 缺点:可能丢失最后一次快照后的数据、fork子进程可能阻塞
AOF(Append Only File):
- 原理:以append-only方式记录所有写操作命令
- fsync策略:always(安全但慢)、everysec(默认折中)、no(由OS决定)
- 优点:数据更安全(最多丢1秒数据)、文件可读
- 缺点:文件体积大、恢复速度慢
AOF重写(Rewrite):
- 为了减少AOF文件体积,将内存中的键值对转换为最小命令集合写入新文件
- Redis 2.4+支持自动触发重写(auto-aof-rewrite-percentage/auto-aof-rewrite-min-size)
- 原理:fork子进程重写,主进程继续记录增量命令到重写缓冲区
混合持久化(Redis 4.0+):
- aof-use-rdb-preamble yes
- AOF文件前半部分用RDB格式(全量快照),后半部分用AOF格式(增量命令)
- 兼具RDB的快速恢复和AOF的低丢数据风险
选择建议:
- 对数据安全性要求高:混合持久化(推荐)
- 允许丢失部分数据:RDB
- 不持久化:关闭所有持久化(纯缓存场景)