每天一个开发小知识
本文为《Redis设计与实现》学习笔记
在 Redis 服务器上会保存所有建立连接的 Redis 客户端信息
struct redisServer{// ...list * client;// ...};
redisClient 的数据结构
typedef struct redisClient{int fd;robj * name;int flag;sds querybuf;robj ** argv;int argc;struct redistCommand * cmd;char buf[REDIS_REPLY_CHUNK_BYTES];int bufpos;list * reply;int authenticated;time_t ctime;time_t lastinteraction;time_t obuf_soft_limit_reached_time;} redisClient;
其中
fd:套接字描述符,-1 表示伪客户端(Lua脚本,AOF 文件等),其余为大于-1的整数,表示普通客户端
name:客户端的名字,默认为空
flag:二进制或形式表示的标志,记录客户端目前的状态
queryBuf:输入缓冲区,保存客户端发送的命令请求,最大 1G,如果超过,服务器会关闭该客户端连接
argv:命令参数,从 queryBuf 解析而来
argc:命令个数,从 queryBuf 解析而来
cmd:命令的实现函数
buf:固定大小的输出缓冲区,保存长度比较小的回复,比如OK,简短字符串,整数,错误信息,默认 16KB
bufpos:buf 的使用长度
reply:可变大小的输出缓冲区,用链表实现
authenticated:身份验证信息,0 表示验证未通过,1 表示验证通过
ctime:客户端的创建时间
lastinteraction:客户端和服务器最后一次交互时间
obuf_soft_limit_reached_time:输出缓冲区第一次到达软性限制的时间
硬性限制和软性限制
reply 虽然为可变大小的输出缓冲区
但是也有最大长度的限制
如果输出缓冲区大于硬性限制
服务器会关闭当前客户端
如果输出缓冲区大于软性限制,小于硬性限制
服务器会判断一段时间内,该客户端的输出缓冲区是否一直大于软性限制
如果是,则关闭客户端
否则,不关闭,同时将 obuf_soft_limit_reached_time 置为 0
每天一个开发小知识,今天你学废了吗?
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




