下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Redis的持久化之RDB

作者:匿名     来源: Python点击数:1323发布时间: 2021-10-25 21:28:26

标签: python基础教程RedisPython

大神带你学编程,欢迎选课

  Redis支持数据的持久性,主要分为RDB和AOF两种方式,接下来的文章里,小编来给大家介绍一下RDB,先来看看什么是RDB。

  RDB持久性是将当前过程数据生成快照并保存在磁盘上的过程。由于是某一时刻的快照,快照中的值应该比内存中的值早或等于。

  生成的rdb文件的名称和存储位置由dbfilename和dir两个参数控制,默认生成的rdb文件为dump.rdb。

  触发方式:

  有两种方法可以触发rdb的持久性,即手动触发和自动触发。

  手动触发:

  redis客户端执行save命令和bgsave命令可以触发rdb的持久性,但两者仍然不同。

  1.使用save命令时,使用redis的主要过程是持久的。此时,redis服务将被堵塞,导致服务无法使用,直到持久完成。不推荐在线环境;

  2.bgsave命令是fork的子过程,使用子过程进行持久化,主过程只在fork的子过程中暂时堵塞,fork操作完成后不堵塞,主过程可以正常进行其他操作。

  3.bgsave是对save堵塞主流程的优化,后续的所有自动触发都是使用bgsave进行的。

  自动触发:

  在以下四种情况下会自动触发。

  在redis.conf中配置savemn,即当m秒内有n次修改时,bgsave会自动触发生成rdb文件;

  主从复制时,从节点到主节点的全复制也会触发bgsave操作,生成当时的快照发送到节点;

  执行debugreload命令重载redis时,还会触发bgsave操作;

  默认情况下执行shutdown命令时,如果不打开aof持久性,也会触发bgsave操作;

  关闭rdb持久性:

  有两种方法可以关闭rdb法:  

 

  过程:

  rdb持久流程图如下:  

 

  具体流程如下:

  redis客户端执行bgsave命令或自动触发bgsave命令;

  主流程判断目前是否存在执行中的子流程,如果存在,则主流程直接返回;

  如果没有正在执行的子过程,则fork的新子过程将被持久化,fork过程将被堵塞。fork操作完成后,主过程可以执行其他操作;

  子过程首先将数据写入临时rdb文件,快照数据写入完成后,原子取代旧rdb文件

  同时向主流程发送信号,通知主流程rdb持续完成,主流程更新相关统计信息(infoPersitence下的rdb_*相关选项)。

  优点和缺点:

  好处:

  RDB文件是某个时间节点的快照。默认情况下,使用LZF算法进行压缩。压缩后的文件体积远小于内存,适用于备份、全复制等场景;

  Redis加载RDB文件恢复数据远快于AOF模式;

  缺点:

  RDB模式实时性不够,无法实现秒级的持久性;

  每一次调用bgsave都需要fork子过程,fork子过程属于重量级操作,经常执行费用较高;

  RDB文件是二进制的,没有可读性OF文件可以在了解其结构的情况下手动修改或修改;

  版本兼容RDB文件;

  小编的分享就到这里了,希望上面的介绍有帮到大家。

    >>>>>>点击进入Python专题

赞(9)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程