readQueryFromClient命令解析流程
- 服务端接收到accept后建立连接,通过aeCreateFileEvent将监听处理函数readQueryFromClient到客户端socket(fd)绑定,等客户端有请求发生时,服务会回调readQueryFromClient函数进行请求的处理。(如果不清楚请求的连接,可以阅读下文章:Redis6.x io事件驱动模型)
- 服务接收到客户端的请求,会通过redis的中的协议,进行字符解析,如果协议中开头是*开始,表示有多命令方式(如事务命令),否则的话,是普通的单命令;命令和参数都用sds的类型存储,并且保存在客户端c中。
- 通过lookupCommand(c->argv[0]->ptr)函数进行redisCommand的查询,找到server.commands中对应的redis命令结构体redisCommand,保存在客户端c中。
- 最后,call()函数调用客户端c保存的命令cmd(redisCommand)结构体中的proc函数。
![在这里插入图片描述](https://img-blog.csdnimg.cn/07c59549a41d492698b7f579462196a7.png#pic_center)
- server.commands保存的dict字典数据(部分):
/**redisCommand结构体*/
struct redisCommand {
char *name;
redisCommandProc *proc;
int arity;
char *sflags; /* Flags as string re