服务器流程
-
初始化全局
- 创建一个RedisServer的结构,并且赋给默认值
- 配置:端口,AOF选项,数据库个数,连接数等等
- 基本数据结构,比如订阅发布的结构
- 事件状态
- 连接的客户端状态
- Lua脚本运行环境
-
载入配置文件
- 载入配置文件,主要是对上面全剧终的配置部分进行设定
- 创建daemon进程
默认Redis是以后台线程启动的 - 初始化功能模块
被初始化的主要功能模块:
- 日志
- 订阅发布
- Lua脚本
- 事件处理
- 客户端处理
- 完成这一步打印LOGO版本信息
- 载入数据
用AOF或者RDB载入数据,这一步打印:DB loaded from disk - 开始事件循环
开始接受事件,完成这一步打印:The server is now ready to accept connections on port
客户端流程
为每个已连接的客户端维持一个RedisClient的结构主要包含如下信息:
- 正在使用的数据库
- 查询和回复缓存
- 事务相关的数据结构
- 阻塞相关的数据结构
- 订阅发布相关的数据结构
- 命令集指针
- 统计选项
客户端执行一个命令的流程如下:
- 通过Socket发送请求协议
- Server通过读事件接受请求,且存入查询缓存
- 从命令表找到相应的命令实现
- 执行命令,且把执行结果存入到响应缓存中
- 客户端写事件就绪的时候把相应缓存中的数据传回客户端