Redis客户端 从发送命令到回复的过程

1.发送命令

当我们在客户端输入命令时,客户端会将命令转换协议格式

2.读取命令

服务器收到后,将命令请求保存到客户端状态的输入缓冲区,客户端状态是保存状态信息的,比如客户端连接时间、是否授权、输入缓存区等等。

完成输入后,对输入缓存区进行分析,保存到客户端状态的argv、argc属性当中,其实就是把输入缓存区进行词法分析。

3.查找命令

客户端状态argv是数组,argv[0]保存的是redis的命令,如set。服务器根据set去命令表当中找到set所指向的函数。命令表的结构就是key 是命令 value是该命令指向的函数、命令有多少参数等修饰这个命令的信息。

4.执行预备操作

进行各种检查,如

1.上一步找到命令指向的函数是不是为null,

2.参数的个数对不对

3.客户端是不是通过了身份验证,其实就是检查一个客户端状态中某个值

等等

5.调用命令的实现函数

调用函数,将函数的返回值放到客户端状态的buf中

6.执行后续工作

1.如果开启慢查询,根据执行的时间来判断是否要写入

2.更新客户端状态信息,如最后一次命令执行的时间,执行命令数量等

3.如果开启了AOF,就写入AOF缓存区

7.命令发送给客户端

前面已经把回复放到客户端的输出缓冲区了,并为客户端套接字关联命令回复处理器。

但客户端的套接字变为可写状态时,命令处理器就会发送命令。

这里说一下,什么套接字变为可写状态。客户端准备好要读取时,就会把套接字变成可写状态,服务器把内容写入套接字,客户端就能读取到。我们可以把套接字理解为文件。

 8.客户端接收

客户端把接收到的内容转换格式

你可能感兴趣的:(Reids)