六、redis客户端
六、redis客户端
每个客户端对应一个redisClient结构,服务器状态redisServer结构中的clients属性是一个链表,保存了连接到该服务器的所有客户端,链表中的每一个元素都是一个redisClient结构;
属性
fd
记录客户端连接到服务器的套接字描述符,是一个大于等于-1的整数值;
-1表示伪客户端,用于处理AOF文件或LUA脚本中包含的redis命令;
name
记录客户端的名字,默认值为NULL,为某个客户端设置name属性让他的身份更清晰;
flags标识
记录客户端的状态或所处的角色
REDIS_MASTER
REDIS_SLAVE
REDIS_LUA_CLIENT
REDIS_FORCE_AOF
...
query_buf
输入缓冲区,客户端发送的命令请求会被保存到对应客户端的输入缓冲区;
输入缓冲区的大小随着输入内容动态的调整,最大不能超过1GB,否则服务器会关闭与客户端的连接;
argv
命令名称、命令参数。argv数组中的第一个元素表示命令名称,后面的所有元素表示命令所需的参数。
redis服务器分析输入缓冲区中的协议格式的命令请求,并将得到的命令名称、命令参数、命令参数个数分别保存到argv、argc属性中。
argc
命令参数个数。
cmd
命令实现函数。redis服务器根据argv数组中的第一个元素,到命令表中找到对应的命令实现函数。
cmd属性是一个指向redisCommand结构的指针,该结构中包含了命令实现函数、命令所需的参数、命令的表示、命令的总执行次数、总消耗时长等信息;
buf/reply
输出缓冲区。redis服务器处理命令请求并将得到的命令回复保存到输出缓冲区中;
buf是一个固定大小的输出缓冲区,用来保存长度较短的回复;
reply由一个链表和多个字符串对象组成,用来保存长度较长的回复;
使用两种模式限制输出缓冲区过大:
硬性限制:
如果输出缓冲区大小超过硬性限制,服务器立即关闭与客户端的连接;
软性限制:
如果输出缓冲区大小超过软性限制,但还没有超出硬性限制。redis服务器会记录下第一次到达软性限制大小的时间。并在之后持续的一段时间内监视输出缓冲区大小。如果在规定的时间内输出缓冲区大小下降到软性限制以下,则不做任何处理;如果在规定时间内输出缓冲区始终大于软性限制,服务器仍然会立即关闭与客户端的连接;
authenticated
身份验证,0表示未通过,1表示已通过。authenticated的取值只有在服务器开启了身份验证功能时才有意义。
ctime
创建客户端的时间,用来计算服务器与客户端之间的连接时长;
last_intersection_time
服务器与客户端之间最后一次互动的时间,用来计算客户端的空转时长;
obuf_soft_limit_reached_time
输出缓冲区大小第一次到达软性限制的时间,结合reply属性使用;
#redis客户端#redis 文章被收录于专栏
redis20000字笔记(含思维导图版本-大纲版本)