redis支持两种不同的持久化操作,一种是快照(snapshoting ,rdb),一种是只追加文件(append-only file ,aof)。本文分别对两种持久化方式在概念、配置、作用上作扼要介绍,旨在作学习记录,读者亦可作java面试的简要回答。部分内容转载JavaGuide。
1、RDB持久化(Redis DataBase)
Redis 可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis 创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本,还可以将快照留在原地以便重启服务器的时候使用。
配置方面,Redis默认是RDB持久化,在配置文件redis.config的有关的配置是:
save 900 1 #在900s内,至少有一个key发生变化,redis就会自动触发BASAVE命令来创建快照
save 300 10 #同理⬆
save 60 10000
因此,在大规模数据恢复中,相比aof,rdb会更高效,但缺点是最后一次持久化后的数据可能会丢失,比如在59s的时候宕机,未能触发save命令,造成59s内的数据无法保存 。
2、AOF持久化(appedn-only file)
开启 AOF 持久化后每执行一条会更改 Redis 中的数据的命令,Redis 就会将该命令写入到内存缓存 中,然后再根据 appendfsync
配置来决定何时将其同步到硬盘中的 AOF 文件。
配置方面,默认情况下 Redis 没有开启 AOF方式的持久化,可以通过 appendonly 参数开启。在在配置文件redis.config的有关的配置是:
appendfsync always #每次有数据修改发生时都会同步到AOF文件,这样会严重降低Redis的速度
appendfsync everysec #每秒钟同步一次aof文件,至多丢失一s的数据
appendfsync no #让操作系统决定何时进行同步
与快照持久化相比,AOF 持久化的实时性更好,因此已成为主流的持久化方案。如果同时开启两种持久化方式,重启时会优先载入aof文件来恢复,因为aof方式的完整性更高。
补充点
RDB方式的保存文件为rump.rdb,AOF方式 的保存文件为appendonly.aof,保存的位置都相同,可通过配置文件中dir配置来设置。