通过使用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时会创建伪客户端(走套接字)