2015
05-13

剖析Redis持久化之RDB方式

最近在阅读《Redis设计与实现》这本书,书中关于Redis的实现原理,做了相对详细的介绍与说明。
Marser整理了Redis持久化之RDB方式的原理、redis.conf配置方式、数据还原操作及RDB方式的特点。下面Marser就来做详细的介绍。

1、RDB持久化原理

RDB持久化既可以通过命令行手动执行,也可以通过redis.conf配置选项定期执行,该功能可以将某个时间点上的数据库中的键值对保存到一个rdb文件中,默认为dump.rdb。

2、RDB持久化命令

Redis中有两个命令可以用于生成RDB文件,一个是save,另一个是bgsave。这两个命令都可以通过命令行来手动执行。下面分别来介绍下这两个命令。

  save命令

执行save命令时,Redis服务器主进程会执行保存工作,所以save命令会阻塞Redis服务器进程。在Redis服务器进程阻塞期间,服务器不能处理任何从客户端发送过来的命令请求,直至RDB文件创建完毕。即save命令是做同步操作
此种方式

  bgsave命令

bgsave命令和save命令不同,在执行bgsave命令时,Redis服务器会派生出一个子进程,由这个子进程来负责执行数据保存工作,并创建RDB文件,而Redis服务器进程(父进程)则继续处理从客户端发送过来的命令请求。即bgsave命令是做异步操作

3、RDB持久化之redis.conf配置

因为bgsave命令可以在不阻塞服务器进程的情况下执行,所以Redis允许用户通过配置redis.conf中的"save"选项,让Redis服务器每隔一段时间自动执行一次bgsave命令。

配置举例如下:

save  5     1       #Redis服务器在5秒之内,对数据库进行了至少1次修改,就执行bgsave命令
save  300   10      #Redis服务器在300秒之内,对数据库进行了至少10次修改,就执行bgsave命令
save  60    10000   #Redis服务器在60秒之内,对数据库进行了至少10000次修改,就执行bgsave命令

只要满足上述三个条件中的任意一个,bgsave命令就会被执行。

配置如下图所示:
redis-4.png

如下图所示,即表示Redis服务器在满足触发条件后,自动执行bgsave操作:
redis-3.png


4、RDB文件还原

在Redis服务器(redis-server)启动时会自动执行。如下图所示(红框标出):
redis-1.png

所以Redis并没有专门用于载入RDB文件的命令,只要Redis服务器在启动时检测到RDB文件存在,它就会自动载入RDB文件。
需要注意的是:Redis服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入工作完成为止。


5、RDB持久化特点

说是特点,其实也可以理解为缺点。RDB持久化每次都是将内存中的全量数据写入到磁盘中,并不是只同步增量数据。如果数据量大,并且写操作比较多的情况下,必然会引起大量的磁盘IO操作,可能会严重影响服务器性能。另一方面,因为RDB持久化是每隔一定时间自动执行保存操作,所以如果Redis意外宕机,就会丢失最后一次持久化的所有修改。

Redis持久化之RDB方式就此介绍完毕,欢迎各位拍砖。下一节将介绍Redis持久化之AOF方式,敬请期待。

「真诚赞赏,手留余香」
您的支持将鼓励我继续创作 :)