一、前言
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文件的体积变得尽可能小。