Redis 持久化之RDB
2021-08-25 11:46:59 小德 Redis 访问次数 92

一、RDB持久化方式将Redis在内存中的数据库状态保存到磁盘,生成一个二进制的压缩文件,可以还原Redis的数据库状态

image.png

二、SAVE和BGSAVE

1、SAVE命令会阻塞Redis的服务器进程,知道RDB文件创建完为止,在服务器进程阻塞期间,服务器不能处理任何命令。

2、BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,父进程继续处理请求。

3、在BGSAVE执行期间,save和BGSAVE命令都会被拒绝,避免产生竞争条件。bgsave执行期间,BGREWRITEAOF命令会被延迟到BGSAVE执行完毕后进行,如果BGREWRITEAOF正在执行那么BGSAVE会被拒绝。

4、save自动间隔保存,命令save  900  1 // 服务器在900秒内对数据库至少1次修改,保存在saveparams数组里面。

通过dirty  属性,记录命令修改了多少次数据库。lastsave属性,时间戳,记录服务器上一次成功执行save或者bgsave的时间

检查保存条件是否满足:服务器周期操作函数serverCron  每100毫秒执行一次是否满足保存条件,满足则执行bgsave命令。

三、持久化数据载入

RDB文件是系统启动时自动载入的,如果系统开启了AOF功能,服务器优先使用AOF还原状态,如果AOF关闭,则使用RDB文件载入。服务器载入RDB文件期间,是阻塞状态。

image.png

四、RDB文件结构

image.png

REDIS 五个字符串用于快速检查载入文件是否是RDB ;

db_version 一个字符串表示的整数,记录文件版本号;

database,所有的redis数据库内容;

EOF表示RDB文件内容结束;

check_sum ,校验和,8个字节的无符号整数,通过REDIS db_version,database,EOF计算得出,载入完成后校验RDB文件是否出错或损坏。

database部分:

略,对于不同类型的键值对,RDB会使用不同的方式来保存。