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文件时创建,载入完毕关闭
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。