- RDB持久化
不想办法将存储在服务器的键值对数据保存到磁盘中,那就会丢
为了解决这个问题,redis提供了RDB持久化功能。
RDB文件的创建与载入:
RDB文件的载入时是服务器启动时自动完成的。
SAVE命令执行时的状态:
阻塞,此时客户端的所有请求都会被拒绝
BGSAVE执行状态:子进程执行操作
服务器在载入RDB文件时会一直处于阻塞状态直到完成
自动间隔性保存:
用户可以通过配置服务器的save选项来让服务器间隔一段时间就执行一次BGSAVE命令
设置保存条件:服务器状态中有个属性saveparam用来保存设置的条件
Dirty计数器和lastsave属性:
检查保存条件是否满足:
RDB文件结构:
Redis部分用来检查载入的是不是RDB文件
Db_version长度为四字节,记录了RDB文件的版本号
Databases:
EOF 长度一字节,标志着RDB文件正文的结束
Check_sum是一个8字节无符号整数,保存校验和,用来检测RDB文件是否出现错误或损坏
Databases部分:
Selectdb常量为一字节,代表接下来读入的将是一个数据库号码
Dbnum保存一个数据库号码
Key_value_pairs保存数据库中的所有键值对数据
Key_value_pairs部分:
Value的编码:
字符串对象:
列表对象:
集合对象:
哈希表对象:
有序集合对象:
INTSET编码的集合
分析RDB文件:
不包含任何键值对的RDB文件:
包含字符串键的RDB文件: