《Redis设计与实现》第十章 RDB持久化
Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以要提供RDB持久化功能来避免数据以为丢失。
10.1 RDB文件的创建与载入
有两个Redis命令可以用于生成RDB文件,一个是SAVE
另外一个是BGSAVE
,Save会阻塞进程,bgssave不会。
10.1.1 SAVE命令执行时的服务器状态
只有在服务器执行完SAVE命令、重新开始接受命令请求之后,客户端发送的命令爱会被处理。
10.1.2 BGSAVE命令执行时的服务器状态
子进程来进行持久化,与许多命令不兼容。
10.1.3 RDB文件载入时的服务器状态
载入RDB时会一直阻塞状态。
10.2 自动间隔性保存
10.2.1 设置保存条件
save 900 1
save 300 10
save 60 100000
10.2.2 diryty计数器和lastsave属性
dirty计数器记录了距离上一次成功执行save命令或者bgsave命令之后,服务器对数据库状态进行了多少次修改(写入、删除、更新等操作)。
lastSave属性是一个unix时间戳记录上次成功执行RDB持久化的时间。
10.2.3 检查保存条件是否满足
10.3 RBD文件结构
常量用大写、变量和数据用小写。
10.3.1 databases部分
一个RDB文件的databases部分可以保存任意多个非空数据库。
10.3.2 key_value_pairs部分
10.3.3 value编码
RDB文件中的每个value部分都保存了一个值对象。
1、字符串对象 2、列表对象
3、集合对象
4、哈希对象
10.4 分析RDB文件
10.4.1 不包含任何键值对的rdb文件
10.4.2 包含字符串键的RDB文件
10.4.3 包含过期时间的字符串键的RDB文件
…各种二进制分析
10.5 重点回顾
- RDB文件用于保存和还原Redis服务器的所有数据库中的所有键值对数据
- save命令阻塞操作保存
- bgsave用紫禁城执行保存操作
- rdb是一个经过压缩的二进制文件,由多个部分组成
- 不同类型的键值对,rdb文件使用不同的方式保存他们。