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属性保留客户端命令,最大1GB2、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文件时创立,载入结束敞开