redis持久化之RDB持久化


由于redis是内存数据库,它将本身的数据库状态储存在内存里面,若是服务器进程退出,服务器的数据库状态就会消失不见。为了解决这个问题,redis提供了rdb持久化,这个功能就是将redis在内存的数据库状态存到磁盘里。redis

一.RDB文件的建立与载入

1.1 RDB文件的建立

redis有两个命令用于建立RDB文件,分别是SAVE 和 BGSAVE.数据库

SAVE命令会阻塞当前服务器进程,知道RDB文件建立完成为止,期间redis服务器不接受任何其余命令;服务器

BGSAVE命令不会阻塞当前服务器进程,而是经过fork一个子进程,由这个子进程来建立RDB文件,服务器进程继续执行命令。blog

1.2 RDB文件的载入

RDB文件载入并无命令去执行,它是在每次服务器启动的时候,只要检测到RDB文件的存在,就会去载入。进程

须要注意的是,若是服务器开启了AOF持久化,优先用AOF文件来加载,以下图所示:内存

前面提到过,当save命令执行时,redis服务器会被阻塞,因此当save命令正在执行时,客户端发送的全部命令请求都会被拒绝。只有服务器在执行完save命令,从新开始接受命令请求以后,客户端it

发送的命令才会被处理。配置

而bgsave命令在执行时,redis服务器还会继续处理客户端的命令请求,可是在bgsave命令执行期间,服务器处理save,bgsave,bgrewriteaof三个命令的方式和平时会有点不一样。请求

1.bgsave命令执行期间,客户端发送的save命令会被拒绝im

2.bgsave命令执行期间,客户端发送的bgsave命令会被拒绝

3.最后bgrewriteaof和bgsave不能同时执行,若是bgrewriteaof正在执行,客户端发送的bgsave命令会被服务器拒绝,若是basave正在执行,那么客户端发送的BGREWRITEAOF命令会被延迟到BGSAVE命令执行完毕以后执行。

1.3 RDB文件载入时的服务器状态

服务器在载入rdb文件期间,会一直处于阻塞状态,直到载入工做完成为止。

1.4 自动间隔性保存

redis容许用户经过设置服务器配置的save选项,让服务器每一个一段时间自动执行一次BGSAVE命令。好比:save 900 1save 300 10save 60 10000