一.简介
为了解决内存数据库数据丢失的问题,所以开发出RDB进行数据持久化。
二.RDB文件的创建与载入
RDB的保存存在两种命令,SAVE和BGSAVE。其中save是阻塞的,在执行save命令期间,该服务器将不会执行其他命令,直到save命令执行结束。bgsave是非阻塞的,执行bgsave时会创建一个子线程,然后由子线程负责创建RDB文件。
redis是没有主动载入RDB文件的命令的,在redis启动的时候会检查是否存在RDB文件,如果存在则加载RDB文件,在加载期间,会一直处于阻塞状态,直到载入结束为止。
redis->save
redis->bgsave
三.自动间隔保存
用户可以设置save选项设置多个保存条件,只要满足其中一项,redis就会执行bgsave命令:
save 900 1
save 300 10
save 60 10000
服务器在900秒内,对数据库进行了至少1次操作
服务器在300秒内,对数据库进行了至少10次操作
服务器在60秒内,对数据库进行了至少10000次操作
如果说用以上设置为原型:
设置服务器状态redisserver结构的saveparams属性。
struct redisServer{
//记录保存条件的数组
struct saveparam *saveparams;
}
服务器状态中的保存条件。
四.RDB文件结构
- REDIS:5字节,用于在载入时快速判断是否为RDB文件。
- db_version:4字节,记录RDB文件版本号。
- database包含一个或多个数据库,以及数据库中的键值对数据。
- EOF:表示RDB文件正文部分正式结束
- check_sum:保存一个校验