剖析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服务器在满足触发条件后,自动执行bgsave操作:

4、RDB文件还原

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

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

5、RDB持久化特点

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AhDung

当ProductOptions之类的重要注册表键权限被拒绝后肿么办!

环境:WIN2K8R2(WIN5.X及WIN6.X均适用,只不过我发现这个问题在2K8R2上比较突出)

783
来自专栏Android开发经验

Android Studio 发布开源项目到Jcenter重要步骤记录

972
来自专栏Java后端技术

聊一聊log4j2配置文件log4j2.xml

  最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log...

1794
来自专栏流柯技术学院

通过Google身份验证器加强Linux帐户安全

而后,google的验证模块就会被复制到/lib64/security目录下,而用来生成密钥的可执行程序:google-authenticator,则复制到/u...

641
来自专栏散尽浮华

分享一例测试环境下nginx+tomcat的视频业务部署记录

需求说明: 在测试环境下(192.168.1.28)部署一套公司某业务环境,其中: 该业务前台访问地址: http://testhehe.wangshibo.c...

19210
来自专栏坚毅的PHP

使用 Java Service Wrapper 启动java后台进程服务

 Java Service Wrapper (http://wrapper.tanukisoftware.com/doc/english/product-ove...

3875
来自专栏小灰灰

时序数据库InfluxDB之备份和恢复策略

首先创建一个数据库 yhhblog, 里面包含两个measurement,对应的数据如下

1792
来自专栏Hadoop实操

如何在Hue中调优Impala和Hive查询

Hue中使用Hive和Impala进行查询,在使用完Hue后退出登录,会出现Hive和Impala的暂用的资源未释放。本篇文章Fayson主要针对该问题在Hue...

142
来自专栏Zachary46

Android直接用手机打包apk!

本人用的是Mac,以下操作都是在Mac环境下配置的,Windows环境的配置移步到Android使用Jenkins自动化构建测试打包apk

1103
来自专栏Danny的专栏

SQL Server 2008 附加数据库时出错

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1183

扫码关注云+社区