redis(9)rdb持久化

1、rdb持久化功能将内存数据保存到磁盘上,避免数据意外丢失,rdb文件是一个经过压缩的二进制文件,可以还原内存数据状态

2、redis文件的创建与载入

2.1、save bgsave

2.2、save命令会阻塞redis服务器进程,直到rdb文件创建完毕为止,不会接受任务命令请求

2.3、bgsave会派生一个子进程,然后子进程负责创建rdb文件,可以继续处理命令请求

创建rdb文件实际由rdbsave函数完成

2.4、rdb载入工作是在服务器启动时自动执行,并没有专门的命令载入,载入期间,一直阻塞其他命令

3.5、aof文件的更新频率比rdb文件更新频率高,所以如果服务器开启了aof持久化功能,优先使用aof文件来还原数据库转态,aof功能关闭状态时,服务器才会使用rdb文件还原数据库状态

bgsave命令执行时候,拒绝下一个bgsave

bgrewiteaof 和bgsave不能同时执行,会拒绝下一个

4、自动间隔保存

save 900 1 ,900秒内,对数据库进行了至少一次修改,保存在saveparams 数组中

4.1、dirty计数器 lastsave属性

dirty计数器保存了上一次save或者bgsave后,对数据库状态进行了多少次修改,包括写入,删除,更新

lastsave保存上一次save或者bgsave的unix时间戳

4.2、检查保存的条件 saveparams是否满足,servercron每100毫秒执行一次

5、rdb文件结构 REDIS db_version databases EOF check_sum

开头是5字节,REDIS字符,快速检查载入的是否是RDB文件

db_version 长度4字节,值是一个字符串表示的整数记录了rdb版本号

databases包含零个或任意多个数据库,以及各个数据库中的键值对数据,如果服务器的数据库,所有的库,为空,那么这部分也是空

EOF 长度为1字节,标志着rdb文件正文内容的结束

check_sum 8字节,保存着一个校验和,通过前面四个部分内容计算得出,检查文件是否有损坏

6、databases部分,如果0号和3号为非空,那么database0 保存着0号数据库中所有的键值对,database3保存着3号数据库中所有的键值对

每个非空数据库的rdb文件都可以保存为selectdb db_number key_value_pairs三个部分

selectdb常量长度为1字节,当程序遇到这个值时候,它知道接下来要读的将是数据库号码

db_number保存着一个数据库号码,根据号码的大小不同,长度可以是1 2 5 字节,读入db_nuber后,服务器会立即调用select命令,切换数据库,key_value_pairs保存着所有的键值对,根据键值对的数量 类型 内容 以及是否有过期时间的不同,key_value_pairs长度也会有所不同

7、key_value_pairs type 1字节 key value三部分组成

带有过期时间的 expiretime_ms常量 1字节,告知读入程序接下来将是一个以毫秒为单位的过期时间 ms 8字节长的带符号整数,记录一个以毫秒为单位的unix时间戳

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在w...
    空语阅读 1,608评论 0 2
  • Redis是一个键值对数据库服务器,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。 Redis数据库...
    Felicia1993阅读 435评论 0 0
  • 企业级redis集群架构的特点 海量数据 高并发 高可用 要达到高可用,持久化是不可减少的,持久化主要是做灾难恢复...
    lucode阅读 2,219评论 0 7
  • Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中有可以包含任意个键值对,...
    猪大金阅读 275评论 0 0
  • 1.Redis特性 1)速度快:数据存放在内存上、基于C语言实现、单线程架构预防多线程竞争问题;2)基于键值对的数...
    Sponge1128阅读 629评论 0 1