redis-客户端

对于每个与服务器进行连接的客户端,服务器都为其建立了相对应的redis.h/redisClient结构(客户端状态),这个结构保存了客户端当前的状态信息,以及执行相关功能时需要用到的数据结构。

redis服务器状态结构的clients属性是一个链表,这个链表保存了所有与服务器连接的客户端的状态结构。

客户端的一些属性

客户端的一些属性,都保存在redisClient结构里面。

  • fd(int fd):fd属性记录了客户端正在使用的套接字描述符。伪客户端的fd属性的值为-1.伪客户端处理的命令请求来源于AOF文件或者Lua脚本,而不是网络。
  • 名字(robj *name):默认情况下,客户端是没有名字的。
  • 标志(int flags):记录了客户端的角色(role),以及客户端目前所处的状态。
  • 输入缓冲区(sds querybuf):用来保存客户端发送的命令请求。最大大小不能超过1GB,否则服务器将关闭这个客户端。
  • 命令与命令参数(robj **argv, int argc):argv属性是一个数组,数组每个项都是一个字符串对象,其中argv[0]是要执行的命令,之后的其他项则是传给命令的参数。argc属性负责记录argv数组的长度。
  • 命令的实现函数(redisCommand *cmd):有一个命令表,其是一个字典,字典的键是一个SDS结构,保存了命令的名字,值为命令所对应的redisCommand结构。redisCommand这个结构保存了命令的实现函数,命令的标志,命令应该给定的参数个数,命令的总执行次数和总消耗时长等统计信息。当程序在命令表中成功找到argv[0]所对应的redisCommand结构时,它会将客户端状态的cmd指针指向这个结构。随后服务器就可以使用cmd属性所指向的redisCommand结构,以及其他命令参数信息,调用命令实现函数,执行客户端指定的命令。
  • 输出缓冲区(char buf[REDIS_REPLY_CHUNK_BYTES], int bufpos):每个客户端有两个输出缓冲区可用,一个大小是固定的(用来保存那些长度比较小的回复,比如OK,简短的字符串值,整数值,错误回复等等,最大大小为16KB)。一个大小是可变的,用于保存那些长度比较大的回复。可变大小缓冲区是由reply链表和一个或多个字符串对象组成(最大大小不能超过服务器设置的硬性限制值,或者在一段时间内,一直超过服务器设置的软性限制,客户端都会被关闭)。
  • 身份验证(int authenticated): authenticated的值为0,表示客户端未通过身份验证;authenticated的值为1,表示客户端已经通过了身份验证。

你可能感兴趣的:(redis-客户端)