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,表示客户端已经通过了身份验证。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 客户端 Redis服务器状态结构的clients属性是一个链表,这个链表保存了所有与服务器连接的客户端状态结构: ...
    涵仔睡觉阅读 3,984评论 0 0
  • 系列 redis数据淘汰原理redis过期数据删除策略redis server事件模型redis cluster ...
    晴天哥_王志阅读 4,666评论 0 1
  • 服务器状态结构使用clients链表连接起多个客户端状态,新添加的客户端状态会被放到链表的末尾 客户端属性 客户端...
    有何不可12317阅读 1,819评论 0 0
  • 服务器为每一个连接的客户端创建数据结构redisClient(记录了客户端信息,比如套接字描述符),如果有多个客户...
    packet阅读 4,886评论 0 2
  • 昨晚并没有睡好.早上匆匆起来,奔单位而去. 每次上班的路上都要经过这个城市的公园.总会看到三三两两的早炼的...
    mary2012ml阅读 3,008评论 0 1

友情链接更多精彩内容