RDB与AOF的比较
RDB: 内存快照形式, 二进制文件体积小,恢复数据速度快,容易丢失数据。
AOF: 存储指令形式, 指令多故而aof文件体积大, 需要一条条执行指令恢复数据故而恢复速度慢,但数据安全性高。
命令 | RDB | AOF |
---|---|---|
启动优先级 | 低 | 高 |
文件体积 | 小 | 大 |
恢复速度 | 快 | 满 |
数据完整性 | 容易丢失数据 | 数据完整性高 |
redis启动时如果既有rdb文件又有aof文件则优先选择aof文件恢复数据,因为aof一般来说数据更全一 点。
Redis 4.0 混合持久化
Redis4.0 支持混合持久化,结合了RDB与AOF持久化的优点。通过如下配置可以开启混合持久化:
# aof-use-rdb-preamble yes
如果开启了混合持久化,那么appendonly.aof的文件格式是这样的:
恢复数据时,先加载RDB的快照,就已经恢复了很大一部分数据,然后再重放增量 AOF 日志就可以完全替代之前的 AOF 全量文件重放,因此重启效率大幅得到提升。
有AOF日志写入,会追加到aof文件的后面,如果发生了AOF重写
,会将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一 起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改 名,原子的覆盖原有的AOF文件,完成新旧两个AOF文件的替换。
bgrewriteaof 手动AOF重写
bgsave 手动RDB持久化