通过使用由I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。
redisClient结构保存客户端的数据结构:
- 套接字描述符
- 名字
- 标志位
- 正在使用的数据库指针,数据库号码
- 当前要执行的命令、参数、参数个数,以及指向命令实现函数的指针
- 输入缓冲和输出缓冲
- 复制状态信息和复制所需数据结构
- 执行BRPOP、BLPOP等列表阻塞命令时使用的数据结构
- 事物状态,执行WATCH命令用到的数据结构
- 执行发布和订阅用到的数据结构
- 身份验证标志
- 创建时间、最后一次通信时间,输出缓冲区大小超出软性限制的事件
- 客户端状态fd属性记录正在使用的套接字描述符,伪客户端(来源于AOF文件或Lua脚本)的fd属性值为-1,普通客户端值为大于-1的整数。
- 一般情况,客户端是没有名字的,可以使用 CLIENT setname 命令为客户端设置名字。
- 标志可以是单个标志也可以是多个标志的二进制,记录客户端的角色和当前状态。