这是我参与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表示通过
在启用了身份验证功能时才有效
还有一些记录属性的时间等等