最近在阅读《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服务器在满足触发条件后,自动执行bgsave操作:
4、RDB文件还原
在Redis服务器(redis-server)启动时会自动执行。如下图所示(红框标出):
所以Redis并没有专门用于载入RDB文件的命令,只要Redis服务器在启动时检测到RDB文件存在,它就会自动载入RDB文件。
需要注意的是:Redis服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入工作完成为止。
5、RDB持久化特点
说是特点,其实也可以理解为缺点。RDB持久化每次都是将内存中的全量数据写入到磁盘中,并不是只同步增量数据。如果数据量大,并且写操作比较多的情况下,必然会引起大量的磁盘IO操作,可能会严重影响服务器性能。另一方面,因为RDB持久化是每隔一定时间自动执行保存操作,所以如果Redis意外宕机,就会丢失最后一次持久化的所有修改。
Redis持久化之RDB方式就此介绍完毕,欢迎各位拍砖。下一节将介绍Redis持久化之AOF方式,敬请期待。

- 本站文章除注明转载外,均为本站原创
- 欢迎任何形式的转载,但请务必注明出处,尊重他人劳动
- 转载请注明:文章转载自:Marser [https://www.marser.cn]
- 本文标题:剖析Redis持久化之RDB方式
- 本文固定链接: https://www.marser.cnarticle/91.html