《Redis设计与实现》第十三章 客户端
通过使用io多路复用技术实现的文件处理器,redis单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。
每个客户端都有一个redisClient
结构,保存当前客户端消息。
13.1 客户端属性
通用属性与特定功能属性。
13.1.1 套接字描述符
伪客户端fd为-1.
13.1.2 名字
在默认情况下,一个连接到服务器的客户端是没有名字的。
使用client setname
设置名字。
13.1.3 标志
记录角色以及所处状态
13.1.4 输入缓冲区
最大不能超过1GB否则会关闭
保存客户端发送的命令请求
13.1.5 命令与命令参数
13.1.6 命令的实现函数
13.1.7 输出缓冲区
服务端回复的结果保存在此处
13.1.8 身份验证
13.1.9 时间
13.2 客户端的创建与关闭
13.2.2 关闭普通客户端
13.2.3 Lua脚本的伪客户端
13.2.4 AOF文件的伪客户端
13.3 重点回顾
- 服务器状态结构使用
clients
链表连接多个客户端状态,新添加的客户端状态会被放到链表末尾。 -
flags
属性使用不同标志来表明客户端的角色以及所处状态(阻塞、读取、等待回复等等) - 输入缓冲区记录了客户端发送的命令请求、最大1GB
- 命令的参数和参数个数会被记录argv和argc里面。
- 固定大小缓冲区16KB最大和可变大小缓冲区
- 输出缓冲区有两种 一个是超出了硬性限制 like关闭,如果在一段时间内也超过软性限制 也被关闭。
- 当客户端连接上服务器时,会创建相应客户端。
- 处理Lua脚本
- 载入AOF时会创建伪客户端(走套接字)