【笔记】《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;
};

dirty计数器和lastsave属性
struct redisServer{
//...
// 修改计数器
long long dirty;
// 上一次执行保存的时间
time_t lastsave;
//...
};
检查保存条件是否满足
Redis的服务器周期性操作函数serverCron默认每隔100毫秒就会执行一次,该函数用于对正在运行的服务器进行维护,它的其中一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足的话就执行BGSAVE命令

10.3 RDB文件结构

datebases 部分


TYPE取值

value 的编码
1. 字符串对象


2. 列表对象


3. 集合对象
保存结构和列表对象相似
4. 哈希表对象

5. 有序集合对象
10.4 分析RDB文件
包含带有过期时间的字符串键的RDB文件



包含一个集合键的RDB文件


10.5 重点回顾


浙公网安备 33010602011771号