Redis提供了RDB和AOF两种持久化机制。
- RDB
RDB,就是把内存数据以快照的形式保存到磁盘上。
什么是快照?可以这样理解,给当前时刻的数据,拍一张照片,然后保存下来。RDB持久化,是指在指定的时间间隔内,执行指定次数的写操作,将内存中的数据集快照写入磁盘中,它是Redis默认的持久化方式。执行完操作后,在指定目录下会生成一个 dump.rdb 文件,Redis 重启的时候,通过加载 dump.rdb 文件来恢复数据。RDB触发机制主要有以下几种:
1、shutdown(正常关闭)时,如果没有开启aof,会触发;kill -9 意外宕机不会触发rdb持久化;
2、redis.conf 默认配置(此配置是针对bgsave):
save 900 1 #900s检查一次,增量的数据变更命令超过1,就触发;
save 300 10 #300s检查一次 更改10次
sava 60 10000 #60s检查一次 更改命令1w条,就触发;
根据这个默认配置,会丢数据;意外宕机的情况下,丢失最后一次持久化后的数据
3、执行命令save或者bgsave
4、执行flushall命令
RDB的优点
适合大规模的数据恢复场景,如备份,全量复制等
RDB缺点
没办法做到实时持久化/秒级持久化,遇到故障会丢失最后一次修改。
- AOF
AOF 持久化功能则提供了一种更为可靠的持久化方式。 每当 Redis 接受到会修改数据集的命令时,就会把命令追加到 AOF 文件里,当你重启 Redis 时,AOF 文件里的命令会被重新执行一次,重建数据。
AOF的优点
数据的一致性和完整性更高
AOF的缺点
OF记录的内容越多,文件越大,数据恢复变慢。