编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Redis读书笔记 - 10 客户端(redis相关书籍)

wxchong 2024-07-21 07:05:22 开源技术 7 ℃ 0 评论

Redis服务器使用单线程单进程方式处理命令请求,并与多个客户端进行网络通信。

客户端创建

客户端使用connect函数链接到服务器时,服务器就会调用连接事件处理器,创建redisClient obj,将这个obj放到 redisServer.clients链表的末尾

redisServer{

sds aof_buf; // AOF缓冲区

redis *db; // 数据库

int dbNum; // 数据库个数

clients; // redis客户端链表

}

客户端

redisClient {

int fd; // 客户端socket的描述符,当客户端是来自aof或者lua,该值为-1

rojb *name; // 客户端名字

int flags; // 客户端角色,详见下方举例说明

ctime; // 客户端创建时间

sds querybuf; // 客户端的命令,默认最大1GB

int authenticated; // 客户端身份验证 , 0表示未通过验证,只能接收AUTH命令

robj *argv; // 客户端的命令解析后的参数,例如set age 18:argv[0]=set,argv[1]=age,argv[2]=10

int argv; // 客户端的命令解析后的参数个数,例如set age 18的argv=3而不是2

struct redisCommand; // 根据argv[0]找到对应的cmd

char buf[REDIS_REPLY_CHUNK_BYTES]; // 固定大小的输出缓冲区,默认16KB

list *reply; // 可变大小的输出缓冲区 当buf用完,或者放不下时启用

int bufpos; // 输出缓冲区大小

lastinteraction; // 客户端与服务端最后一次交互时间

obuf_soft_limit_reached_time; // 见下文“输出缓冲区”说明

}

  • flags举例

REDIS_MASTER:表示客户端是一个主服务器

REDIS_MULTI:表示客户端正在执行事务

REDIS_FORCE_AOF:表示强制将此命令写入AOF文件

  • 输出缓冲区

业务场景举例

hardlimit,

softlimt,

obuf_soft_limit_reached_time

说明

normal(普通场景)

0,0,0

不限制客户端输出缓冲区

slave(主从复制)

256mb,64mb,60

当输出缓冲区超过256mb,与客户端断开

当输出缓冲区超过64mb的时长超过60s,与客户端断开

pubsub(消息系统)

32mb,8mb,60

当输出缓冲区超过32mb,与客户端断开

当输出缓冲区超过8mb的时长超过60s,与客户端断开

客户端关闭

客户端关闭场景:

  1. 客户端退出

  2. 客户端发了不符合协议的命令

  3. 客户端空转时间超过了timeout设置的时间

  4. 输出缓冲区超过了限制,见上文“输出缓冲区”说明

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表