持久化是为了将内存中的数据写入到磁盘里面,主要是为了机器重启,机器故障之后的数据恢复。或者说防止系统故障将数据备份。
快照持久化(RDB)
Redis可以通过创建快照来获得内存里面的数据在某一时间节点上的副本。Redis创建快照之后可以将快照备份到其他服务器,根据这个快照创建具有相同数据的服务器副本(redis的主从结构,提高redis性能)。还可以在重启的时候使用这个快照恢复数据。
快照持久化是redis默认的持久化方式,Redis.conf配置文件中默认有此下配置:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。 save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。 save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
只追加文件持久化(AOF)
与快照持久化相比,只追加文件持久化的实时性更好,默认情况下Redis没有开启这种方式。可以通过appendonly参数开启:
appendonly yes
开启AOF持久化后,每执行一条会更改Redis数据的命令,redis就会将命令写进硬盘的AOF文件。(AOF 文件的保存位置和 RDB 文件的位置相同,都是通过 dir 参数设置的,默认的文件是appendonly.aof。)
Redis有三种不同的AOF持久化方式,分别是:
appendfsync always #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度 appendfsync everysec #每秒钟同步一次,显示地将多个写命令同步到硬盘 appendfsync no #让操作系统决定何时进行同步
为了兼顾数据安全,和写入性能,可以采用appendfsync everysec 选项。每秒同步一次AOF文件,对redis的性能基本没有影响,就算是系统崩溃,用户也只损失一秒内产生的数据。