redis-客户端

客户端

Redis服务器是典型的一对多服务器程序

对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redisClient结构,这个结构体中包含了:

  • 客户端的套接字描述符
  • 客户端的名字
  • 客户端的标志位
  • 客户端使用数据库的指针,以及该数据库的号码
  • 客户端正在要执行的命令、命令参数、命令参数的格式,以及指向命令实现函数的指针
  • 客户端的输入缓冲区和输出缓冲区
  • 客户端的复制状态信息,以及进行复制所需的数据结构
  • 客户端执行BRPOP、BLPOP等列表阻塞命令时使用的数据结构
  • 客户端的事务状态,以及执行WATCH命令时用到的数据机构
  • 客户端的身份验证标识

Redis的服务器状态中的clients记录了所有与当前服务器相连的客户端

伪客户端

伪客户端处理的命令是来自AOF或LUA脚本

客户端标志

  1. REDIS_MASTER 标志表示的是客户端代表的一个主服务器,REDIS_SLAVE标志标识客户端代表的是一个从服务器
  2. REDIS_LUA_CLIENT代表的是客户端是专门用于处理LUA脚本里面包含的Redis命令的伪客户端
  3. REDIS_MULTI 标志表示的是客户端正在执行事务
  4. REDIS_FORCE_AOF 强制服务器将当前执行的命令写入到AOF文件
  5. REDIS_FORCE_REPL 强制主服务器将当前执行的命令复制给所有从服务器

命令

客户端发送的命令请求保存到客户端状态的queryBuf属性,服务器对命令请求的内容进行解析,并将得出的命令参数以及命令参数的个数分别保存到客户端状态的argv和argc属性,argv属性是一个数组,保存了命令,比如“set”、“val”、“10”。

内部维护了一个redisCommand,即指向命令表中命令执行函数的地址

输出缓冲区:分为两个缓冲区

  1. 固定大小的缓冲区用来保存哪些长度比较小的回复
  2. 可变大小的缓冲区用来保存长度比较大的回复,比如元素很多的列表

身份验证

存有一个authenticated属性用于记录客户端通过了身份验证

如果authenticated的值为0,表示客户端未通过身份验证
如果authenticated的值为1,表示客户端通过了身份验证