服务器
Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转。
命令请求的执行过程
发送命令请求
读取命令请求
当客户端与服务器之间的连接套接字因为客户端的写入而变得可读时,服务器将调用命令请求处理器来执行以下操作:
- 读取套接字中协议格式的命令请求,并将其保存到客户端状态到的输入缓冲区中
- 对输入缓冲区中的命令请求进行分析,提取出命令请求中包含的命令参数,以及命令参数的个数,然后分别将参数和参数个数保存到客户端状态的argv属性和argc属性里面
- 调用命令执行器,执行客户端指定的命令
查找命令实现
根据客户端状态的argv[0]参数,在命令表中查找参数所指定的命令
执行预备操作
确保命令可以正确、顺利的被执行
调用命令的实现函数
执行以下语句
执行后续工作
- 如果服务器开启了慢查询日志功能,那么慢查询日志模块会检查是否需要为刚刚执行完的命令请求添加一条新的慢查询日志
- 根据刚刚执行命令所耗费的时长,更新被执行命令的redisCommand结构的milliseconds属性,并将命令的redisCommand结构的calls计数器的值增一
- 如果服务器开启了AOF持久化功能,那么AOF持久化模块会将刚刚执行的命令请求写入到AOF缓冲区里面
- 如果有其它从服务器正在复制当前这个服务器,那么服务器会将刚刚执行的命令传播给所有从服务器
将命令回复给客户端
当命令回复发送完毕之后,回复处理器会清空客户端状态的输出缓冲区
客户端接收并打印命令回复
serverCron函数
Redis服务器中的severCron函数默认每隔100毫秒执行一次,这个函数负责管理服务器的资源,并保持服务器自身的良好运转
severCron接下来的操作
- 更新服务器时间缓存
- 更新LRU时钟
- 更新服务器每秒执行命令次数
- 更新服务器内存峰值记录
- 更新stat_peak_memory属性,其记录了服务器的内存峰值大小
- 处理SIGTERM信号
- 管理客户端资源
- 管理数据库资源
- 执行被延迟的BGREWRITEAOF
- 检查持久化操作的运行状态
- 将AOF缓冲区中的内容写入AOF文件
- 关闭异步客户端
- 增加cronloops计数器的值
初始化服务器
初始化服务器状态结构
创建一个struct redisServer类型的实例变量server作为服务器的状态,并为结构中的各个属性设置默认值。
载入配置选项
在启动服务器时,用户可以通过给定配置参数或者指定配置文件来修改服务器的默认配置。
- 如果用户为这些属性的相应选项指定了新的值,那么服务器就使用用户指定的值来更新相应的属性
- 如果用户没有为属性的相应选项设置新的值,那么服务器就沿用之前initServerConfig函数为属性设置的默认值
初始化服务器数据结构
调用initServer函数,为以上提到的数据库结构分配内存,并在有需要时,这些数据结构设置或者关联初始化值
还原数据库状态
在完成对服务器状态server变量的初始化之后,服务器需要载入RDB文件或者AOF文件,并根据文件记录的内容来还原服务器的数据库状态,启用AOF功能就先使用AOF文件来还原数据库
执行事件循环
打印以下日志,并开始执行服务器的事件循环
至此,服务器初始化工作完成



