【笔记】《Redis设计与实现》chapter10 RDB持久化

chapter10 RDB持久化

10.1 RDB文件的创建和载入

有两个Redis命令可以用于生成RDB文件,SAVE和BGSAVE

SAVE阻塞服务器进程进行RDB文件的创建,BGSAVE则创建服务器子进程进行RDB文件的创建

因为AOF文件的耿信频率通常比RDB文件的更新频率高,所以

  • 如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据库状态
  • 只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据库状态

10.2 自动间隔性保存

设置保存条件

服务器会为save选项设置默认条件:

save 900 1
save 300 10
save 60  10000

接着服务器根据save选下昂设置的条件设置服务器状态redisServer结构的saveparams属性:

struct redisServer{
    //...
    
    // 记录了保存条件的数组
    struct saveparam *saveparams;
    
    //...
};
struct saveparam{
  	// 秒数
    time_t seconds;
    
    // 修改数
    int changes;
};

image-20201009132409458

dirty计数器和lastsave属性

struct redisServer{
    //...
    
    // 修改计数器
    long long dirty;
    
    // 上一次执行保存的时间
    time_t lastsave;
    
    //...
};

检查保存条件是否满足

Redis的服务器周期性操作函数serverCron默认每隔100毫秒就会执行一次,该函数用于对正在运行的服务器进行维护,它的其中一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足的话就执行BGSAVE命令

image-20201009140004445

10.3 RDB文件结构

image-20201009140431162

datebases 部分

image-20201009143409265

image-20201009143440879

TYPE取值

image-20201009143508611

value 的编码

1. 字符串对象

image-20201009153012994

image-20201009153027727

2. 列表对象

image-20201009153616220

image-20201009153626152

3. 集合对象

保存结构和列表对象相似

4. 哈希表对象

image-20201009154605640

5. 有序集合对象

10.4 分析RDB文件

包含带有过期时间的字符串键的RDB文件

image-20201009231521921

image-20201009231535134

image-20201009231920089

包含一个集合键的RDB文件

image-20201009232303093

image-20201009232348718

10.5 重点回顾

image-20201009232429984

posted @ 2021-04-20 11:28  汉森伯逸  阅读(47)  评论(0)    收藏  举报