redis客户端🥈

209 阅读2分钟

这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

客户端属性

命令与命令参数

服务器将客户端发送的命令请求保存到客户端状态的querybuf属性之后,服务器将对命令请求的内容进行分析,并将得出的命令参数的个数分别保存到客户端状态的argv属性和argc属性

argv属性是个数组,每个项都是字符串对象,第一项是要执行的命令,其他项是传给命令的参数

argc属性负责记录argv数组的长度

命令的实现函数

当服务器从协议内容中分析得出argv属性和argc属性的值后,服务器根据argv的第一项的值在命令表中查找命令所对应的命令实现函数。

命令表是一个字典,字典的键是SDS结构,保存命令的名字,字典的值是redisCommand结构保存命令的实现函数,命令的标志等待

命令表的查找操作不区分输入字母的大小写,所以argv的第一项无论大写还是小写查找结果相同

输出缓冲区

执行命令得到的命令回复被保存在客户端状态的输出缓冲区,每个客户端都有两个输出缓冲区,一个缓冲区的大小是固定的,另一个是可变的,固定缓冲区用于保存长度比较小的回复,比如ok等等,可变大小的缓冲区用于保存长度比较大的回复,比如一个很长的字符串值等等。

reidsclient结构中的buf属性是固定大小的缓冲区,它是个数组,默认大小16KB,bufops属性记录buf数组目前已使用的字节数量。

buf数组的空间用完或者回复太大没法放进buf数组中,服务器使用可变大小的缓冲区,由reply链表表示

身份验证

redisclient结构中的authenticated属性记录客户端是否通过身份验证:如果authenticated为0表示未通过,为1表示通过

在启用了身份验证功能时才有效

还有一些记录属性的时间等等