《Redis设计与实现》第十章 RDB持久化

Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以要提供RDB持久化功能来避免数据以为丢失。

《Redis设计与实现》第十章 RDB持久化

10.1 RDB文件的创建与载入

有两个Redis命令可以用于生成RDB文件,一个是SAVE另外一个是BGSAVE,Save会阻塞进程,bgssave不会。
《Redis设计与实现》第十章 RDB持久化
《Redis设计与实现》第十章 RDB持久化

10.1.1 SAVE命令执行时的服务器状态

只有在服务器执行完SAVE命令、重新开始接受命令请求之后,客户端发送的命令爱会被处理。

10.1.2 BGSAVE命令执行时的服务器状态

《Redis设计与实现》第十章 RDB持久化
子进程来进行持久化,与许多命令不兼容。

10.1.3 RDB文件载入时的服务器状态

载入RDB时会一直阻塞状态。

10.2 自动间隔性保存

《Redis设计与实现》第十章 RDB持久化

10.2.1 设置保存条件

save 900 1
save 300 10
save 60 100000

《Redis设计与实现》第十章 RDB持久化

10.2.2 diryty计数器和lastsave属性

dirty计数器记录了距离上一次成功执行save命令或者bgsave命令之后,服务器对数据库状态进行了多少次修改(写入、删除、更新等操作)。
lastSave属性是一个unix时间戳记录上次成功执行RDB持久化的时间。

《Redis设计与实现》第十章 RDB持久化
《Redis设计与实现》第十章 RDB持久化

10.2.3 检查保存条件是否满足

《Redis设计与实现》第十章 RDB持久化

10.3 RBD文件结构

《Redis设计与实现》第十章 RDB持久化
常量用大写、变量和数据用小写。

《Redis设计与实现》第十章 RDB持久化

10.3.1 databases部分

一个RDB文件的databases部分可以保存任意多个非空数据库。

《Redis设计与实现》第十章 RDB持久化
《Redis设计与实现》第十章 RDB持久化

10.3.2 key_value_pairs部分

《Redis设计与实现》第十章 RDB持久化
《Redis设计与实现》第十章 RDB持久化
《Redis设计与实现》第十章 RDB持久化

10.3.3 value编码

RDB文件中的每个value部分都保存了一个值对象。

1、字符串对象 2、列表对象《Redis设计与实现》第十章 RDB持久化
3、集合对象
《Redis设计与实现》第十章 RDB持久化
4、哈希对象
《Redis设计与实现》第十章 RDB持久化

10.4 分析RDB文件

10.4.1 不包含任何键值对的rdb文件

《Redis设计与实现》第十章 RDB持久化

10.4.2 包含字符串键的RDB文件

《Redis设计与实现》第十章 RDB持久化

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

《Redis设计与实现》第十章 RDB持久化
…各种二进制分析

10.5 重点回顾

  • RDB文件用于保存和还原Redis服务器的所有数据库中的所有键值对数据
  • save命令阻塞操作保存
  • bgsave用紫禁城执行保存操作
  • rdb是一个经过压缩的二进制文件,由多个部分组成
  • 不同类型的键值对,rdb文件使用不同的方式保存他们。

《Redis设计与实现》第十章 RDB持久化