一、前言

Redis是一款内存服务器,为了避免出现突然断电造成Redis服务器中的数据失效。我们需要对数据进行备份。将Redis在内存中的数据持久化到硬盘等非易失性介质中,来保证数据的可靠性。Redis提供了两种方式,快照和只追加文件。

快照(RDB):就是我们通常所说的备份,定期将内存中的数据持久化到硬盘中。

只追加文件(AOF):在执行写命令的时候,将写命令复制到硬盘中,后期只需再重新执行一次命令就可以。

二、快照持久化

快照就是我们所说的备份,用户可以将Redis内存中的数据在某一个时间点进行备份,在创建快照之后,用户可以对快好进行备份。但是创建快照的方式并不能完全保证我们的数据不丢失,快照只能恢复上次备份之前的数据。系统发生崩溃后,用户将丢失最近一次快照之后更改的所有数据。一次,快照持久化只适合于数据不经常更改后丢失数据影响不太大的场景。

常见快照的方式:

客户端通过向Redis发送BGSAVE 命令来创建快照。使用BGSAVE 的时候,Redis会调用fork创建一个子进程,然后子进程负责将数据写到硬盘里,而父进程继续处理命令请求。

使用场景:

当Redis通过SHUTDOWN命令接收到关闭服务器的请求时,会执行一次SAVE命令,阻塞所有的客户端,不再执行客户端发送的任何消息,并且在执行完SAVE命令之后关闭服务器。

三、AOF持久化

AOF持久化会将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化。这样,我们再恢复数据的时候,只需要从头到尾执行一下AOF即可恢复数据。

同步频率:

选项

同步频率

always

每个Redis写命令都要同步写入硬盘,这样会严重降低Redis的速度

everysec

每秒执行一次同步,显示地将多个写命令同步到硬盘

no

让操作系统来决定应该何时进行同步

重写/压缩AOF文件:

随着数据量的增大,AOF的文件可能会很大,其中包含着一些冗余信息。用户可以向Redis发送BGREWRITEAOF 命令,这个命令会通过移除AOF文件中的冗余命令来重写AOF文件,使AOF文件的体积变得尽可能小。