共计 1309 个字符,预计需要花费 4 分钟才能阅读完成。
Redis 客户端
1、redis 为每个客户端保留的状态信息:
(01)客户端的套接字描述符(02)客户端的名字(03)客户端的标记值(flag)(05)指向客户端正在应用的数据库指针,以及该数据库的号码(06)客户端以后要执行的命令、命令的参数、命令参数的个数, 以及指向命令实现函数的指针。(07)客户端的输出缓冲区和输入缓冲区。(08)客户端的复制状态信息, 以及进行复制所需的数据结构。(09)客户端执行 BRPOP、BLPOP 等列表阻塞命令时应用的数据结构。(10)客户端的事务状态, 以及执行 WATCH 命令时用到的数据结构。(11)客户端执行公布与订阅性能时用到的数据结构。(12)客户端的身份验证标记。(13)客户端的创立工夫, 客户端和服务器最初一次通信的工夫, 以及客户端的输入缓冲区大小超出软性限度 (soft limit) 的工夫。
2、客户端属性:
2、1:fd 属性记录了客户端正在应用的套接字描述符(1)-1: 伪客户端的 fd 属性值(2)大于 -1:一般客户端的 fd 属性值
2、2: 客户端的名字(1)客户端的名字记录在客户端状态的 name 属性里(2)name 默认空白,CLIENT set 命令设置名称
2、3: 标记,flag(1)记录客户端的角色,以及客户端状态。REDIS_MASTER: 主服务器;REDIS_SLAVE: 从服务器;REDIS_PRE_PSYNC: 低于 redis2.8 的从服务器;REDIS_LUA_CLIENT:lua 命令伪客户端;REDIDS_MONITOR: 正在执行 monitor 命令;REDIS_UNIX_SOCKET:UINIX 套接字客户端
2、4: 输出缓冲区
querybuf 属性保留客户端命令,最大 1GB
2、5: 命令与命令参数
命令参数以及命令参数的个数别离保留在 argv(数组)和 argc(数组长度)中
2、6: 命令函数的实现(1)argv[0]对应命令表中的命令实现函数(2)命令表是个字典构造,字典的键是 SDS 构造,字典的值是 redisCommand 构造
2、7:输入缓冲区(1)保留命令回复(2)固定大小的缓冲区保留长度比拟小的回复,可变大小的缓冲区保留长度比拟大的回复
2、8: 身份验证
客户端状态的 authenticated 属性用于记录客户端是否通过了身份验证,0/ 1 别离记录是否通过了身份验证
2、9: 工夫(1)ctime:客户端创立工夫(2)lastinteraction: 客户端与服务器上次产生交互的工夫(3)obuf_soft_limit_recached_time: 记录了输入缓冲区第一次达到 soft limit 的工夫
3、客户端的创立与敞开
3、1: 创立一般客户端
增加一个 client 到 clients 表的开端
3、2: 敞开一般客户端(1)客户端过程退出或被杀死(2)发送带有不合协定格局的命令(3)客户端成为 CLIENT KILL 命令的指标(4)设置了 timeout 配置选项且到了设置的值(5)命令大小超过了命令缓冲区的限度大小(6)命令回复超过了输入缓冲区的大小
3、3: lua 脚本伪客户端
服务器初始化时创立,服务器容许期间始终在
3、4: AOF 文件的伪客户端
服务器在载入 AOF 文件时创立,载入结束敞开
正文完