快照持久化
就是获得存储在内存里面的数据在某个时间点上的副本。
在创建快照之后,用户可以对快照进行备份,可以将快照复制到其他服务器,从而创建具有相同数据的服务器副本,还可以将快照留在原地,以便重启服务器时使用。
创建快照的办法,有以下几种
- 客户端可以通过向Redis发送bgsave命令来创建一个快照。对于支持bgsave命令的平台来说,Redis会调用fork来创建一个子进程,然后子进程负责将快照写入硬盘,而父进程继续处理命令请求。
- 客户端还可以通过向Redis发送save命令来创建一个快照。接到save命令的Redis服务器在快照创建完毕之前将不再响应任何其他命令。save命令并不常用,我们通常只会在没有足够内存去执行bgsave命令的情况下,又或者即使等待持久化操作执行完毕也无所谓的情况下才会使用这个命令
- 如果用户设置了save配置选项,比如save 60 10000 那么从Redis最近一次创建快照之后开始算起,当“60秒之内有一万次写入”这个条件被满足时,Redis就会自动触发bgsave命令。如果用户设置了多个save配置选项,那么当任意一个save配置选项所设置的条件被满足时,Redis就会触发一次bgsave命令。
- 当Redis是通过shutdown命令接收到关闭服务器的请求时,或者接收到标准term信号时,会执行一个save命令,阻塞所有客户端,不再执行客户端发送的任何命令,并在save命令执行完毕之后关闭服务器。
- 当一个Redis服务器连接另一个Redis服务器,并向对方发送sync命令来开始一次复制操作的时候,如果主服务器目前没有在执行bgsave操作,或者主服务器并非刚刚执行完bgsave操作,那么主服务器就会执行bgsave命令。
Aof持久化
会将被执行的写命令写到aof文件的末尾以此来记录数据发生的变化,因此Redis是只要要从头到尾重新执行一次aof文件包含的所有写命令,就可以恢复aof文件所记录的数据集。