Redis命令请求的执行过程:
1.发送命令请求
客户端将命令请求转换成协议格式,通过连接到服务器的套接字发送给服务器。
2.读取命令请求
1)读取套接字协议格式的请求,保存到客户端状态的缓冲输入区。
2)分析缓冲区命令,提取命令参数及个数,分别保存到客户端状态的argv属性和argc属性。
3)调用命令执行器。
3.命令执行器
1)查找实现命令:根据客户端状态的argv[0]参数,查找参数指定的命令,保存到客户端状态的cmd属性。
2)执行预备操作:检查客户端cmd属性指向、参数个数、身份验证是否合法等等一系列服务器和客户端状态的校验。
3)调用命令的实现函数:函数调用产生setCommand(client)将产生一个 "+OK\r\n" 回复,保存到客户端的buf属性。
4)执行后续工作:根据配置执行相应操作,例如慢查询日志、AOF持久化、主从服务。
4.将命令回复发送给客户端:将协议格式的命令回复 +“OK\r\n”发送给客户端。
5.客户端接收并打印命令回复:将协议回复的 “OK\r\n” 转换成 “OK\n” 打印给用户。
Redis服务器中serverCron函数每隔100ms执行一次,该函数负责管理服务器资源并保持服务器良好运转。
- 更新服务器时间缓存
- 更新LRU时钟
- 更新服务器每秒执行命令次数
- 更新服务器内存峰值记录
- 处理SIGTERM信号
- 管理客户端资源
- 管理数据库资源
- 执行被延迟的BGREWRITEAOF
- 检查持久化操作的运行状态
- 将AOP缓冲区内容写入AOF文件
- 关闭异步客户端
- 增加cronloops计数器的值