《Redis设计与实现》第十三章 客户端

通过使用io多路复用技术实现的文件处理器,redis单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。
每个客户端都有一个redisClient结构,保存当前客户端消息。

《Redis设计与实现》第十三章 客户端
《Redis设计与实现》第十三章 客户端

13.1 客户端属性

通用属性与特定功能属性。

13.1.1 套接字描述符

《Redis设计与实现》第十三章 客户端
伪客户端fd为-1.

13.1.2 名字

在默认情况下,一个连接到服务器的客户端是没有名字的。
使用client setname设置名字。
《Redis设计与实现》第十三章 客户端

13.1.3 标志

《Redis设计与实现》第十三章 客户端
记录角色以及所处状态
《Redis设计与实现》第十三章 客户端

13.1.4 输入缓冲区

《Redis设计与实现》第十三章 客户端
最大不能超过1GB否则会关闭
保存客户端发送的命令请求

13.1.5 命令与命令参数

《Redis设计与实现》第十三章 客户端

13.1.6 命令的实现函数

《Redis设计与实现》第十三章 客户端

13.1.7 输出缓冲区

服务端回复的结果保存在此处
《Redis设计与实现》第十三章 客户端

13.1.8 身份验证

《Redis设计与实现》第十三章 客户端

13.1.9 时间

《Redis设计与实现》第十三章 客户端

13.2 客户端的创建与关闭

《Redis设计与实现》第十三章 客户端

13.2.2 关闭普通客户端

《Redis设计与实现》第十三章 客户端

13.2.3 Lua脚本的伪客户端

《Redis设计与实现》第十三章 客户端

13.2.4 AOF文件的伪客户端

《Redis设计与实现》第十三章 客户端

13.3 重点回顾

  • 服务器状态结构使用clients链表连接多个客户端状态,新添加的客户端状态会被放到链表末尾。
  • flags属性使用不同标志来表明客户端的角色以及所处状态(阻塞、读取、等待回复等等)
  • 输入缓冲区记录了客户端发送的命令请求、最大1GB
  • 命令的参数和参数个数会被记录argv和argc里面。
  • 固定大小缓冲区16KB最大和可变大小缓冲区
  • 输出缓冲区有两种 一个是超出了硬性限制 like关闭,如果在一段时间内也超过软性限制 也被关闭。
  • 当客户端连接上服务器时,会创建相应客户端。
  • 处理Lua脚本
  • 载入AOF时会创建伪客户端(走套接字)

《Redis设计与实现》第十三章 客户端