AP计算机科学A(APcomputer science A)复习备考攻略视频教程
43754 人在学
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专题