数据库状态:Redis服务器中的非空数据库以及它们的键值对
因为Redis是内存数据库,需要办法将内存中的数据库状态保存到磁盘,否则服务器进程退出,服务器中的数据库状态也会消失不见
RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行
RDB文件的创建与载入
两个Redis命令可以用于生成RDB文件,一个是SAVE,一个是BGSAVE
SAVE命令会阻塞Redis服务器进程
BGSAVE命令会派生出一个子进程负责创建RDB文件
BGSAVE命令执行期间,SAVE命令和BGSAVE命令会被服务器拒绝
时间工作由rdb.c/rdbSave函数完成
RDB文件的载入工作是在服务器启动时自动执行的
AOF文件的更新频率通常比RDB文件的更新频率高,所以
载入RDB文件实际工作由rdb.c/rdbLoad函数完成
载入RDB文件期间,服务器处于阻塞状态
自动间隔性保存
配置服务器的save选项,任意一个条件被满足,服务器就执行BGSAVE命令
saveparams数组每个元素都是一个saveparam结构,保存了一个save选项的保存条件
dirty计数器,记录距离上一次成功执行SAVE或者BGSAVE命令后,服务器状态进行了多少次修改
lastsave属性是一个UNIX时间戳,记录了服务器上一次成功执行SAVE或者BGSAVE命令的时间
检查保存条件是否满足
Redis服务器周期性操作函数serverCron默认每隔100毫秒执行一次
RDB文件结构
REDIS五字节,载入文件时快速检查载入的文件是否RDB文件
db_version长度4字节,记录了RDB文件的版本号
databases部分包含着零个或多个数据库以及数据库中的键值对数据
EOF常量长度1字节,标志着RDB正文内容的结束
check_num是8字节无符号整数,保存着一个校验和
databases部分
如果0号和3号非空
。。。
分析RDB文件
od命令用给定的格式转存并打印输入文件
不包含任何键值对的RDB文件
RDB文件检查工具
Redis本身带有RDB文件检查工具redis-check-dump