面试题答案
一键面试- 启动加载检查:
- Redis 启动时,会检查是否配置了
save
相关的持久化策略(RDB 持久化方式),如果配置了,并且存在 RDB 文件(默认文件名dump.rdb
,可通过配置文件修改),则会准备载入该文件。
- Redis 启动时,会检查是否配置了
- 打开 RDB 文件:
- Redis 使用操作系统提供的文件系统调用(如
open
函数)打开 RDB 文件。如果文件打开失败(例如文件不存在、权限不足等),则会报错并终止载入过程。
- Redis 使用操作系统提供的文件系统调用(如
- 读取 RDB 文件头:
- 成功打开文件后,首先读取 RDB 文件头。RDB 文件头包含了一些元数据信息,例如 RDB 版本号。通过版本号,Redis 可以判断该 RDB 文件是否与当前 Redis 版本兼容。如果版本不兼容,Redis 可能会拒绝载入该文件。
- 解析数据部分:
- 读取完文件头后,开始逐块解析 RDB 文件的数据部分。RDB 文件采用了紧凑的二进制格式来存储 Redis 数据库中的数据,包括各种数据类型(字符串、哈希、列表、集合、有序集合等)。
- 字符串类型:Redis 会读取字符串的长度,然后根据长度读取字符串的内容,并将其恢复到内存数据库中。
- 哈希类型:会先读取哈希对象的元素数量,然后依次读取每个键值对并恢复到哈希对象中。
- 列表类型:读取列表的元素数量,接着逐个读取列表元素并恢复到列表对象中。
- 集合类型:读取集合的元素数量,然后依次读取每个集合元素并恢复到集合对象中。
- 有序集合类型:读取有序集合的元素数量,对于每个元素,读取成员和分数,恢复到有序集合对象中。
- 数据恢复到内存:
- 在解析每一块数据时,Redis 将解析后的数据恢复到内存中的相应数据结构中。对于单线程的 Redis 来说,这个过程是阻塞的,直到整个 RDB 文件被成功载入并恢复数据。
- 完成载入:
- 当整个 RDB 文件读取并解析完成,且数据成功恢复到内存后,Redis 会关闭 RDB 文件,并标记 RDB 载入过程完成。此时,Redis 可以开始正常接受客户端的命令请求。