美文网首页
redis(12)客户端

redis(12)客户端

作者: 大飞飞_s8 | 来源:发表于2019-09-26 19:39 被阅读0次

1、redis服务器是一对多服务,通过i/o的多路复用技术实现文件事件处理器,redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信

2、客户端包含的属性分为两类

一类比较通用的属性,无论客户端执行什么工作都要用到这些属性

一类与特定功能相关的属性,比如操作数据库时需要用到的db属性和dictid属性,执行事务时需要用到的mstate属性,以及执行watch时需要用到的watched_keys属性

3、套接字描述

fd可以是-1或者大于-1的整数

fd=-1时,为伪客户端,执行来源于aof文件或者lua脚本,而不是网络

client list记录所有连接到服务器的普通客户端

4、名字,默认没有名字,使用client steName命令之后,使客户端身份更加清晰

5、标志 flags,记录客户端的角色(role)

redis_master标志客户端代表主服务器,redis_slave标志客户端代表一个从服务器

redis_pre_psync标志客户端代表一个版本低于redis2.8的从服务器

redis_LUA_CLIENT标识客户端是专门用于处理lua脚本里面包含的redis命令的伪客户端

另外一些标志客户端目前所处的状态

rediS_MONITOR标志客户端正在执行mornitor命令

redis_unix_socket标志服务器使用unix套接字来连接客户端

redis_blocked标志客户端正在被brpop、blpop等命令阻塞

redis_unblocked标志客户端已经从redis_blocked标志所表示的阻塞状态

redis_multi标志客户端正在执行事务

。。。

6、输入缓冲区

输入缓冲区大小会根据输入内动动态缩小扩大,最大不超过1gb,否则服务器将关闭这个客户端

7、命令与命令参数

argv属性是一个数组,argv[0]表示要执行的命令,后面是命令参数,argc负责记录argv数组的长度

8、命令实现函数

服务器根据argv[0]的值,在命令表中查找到命令所对应的命令实现函数

9、输出缓冲区

两种,一种固定大小,保存哪些长度比较小的回复,比如ok字符串,默认16KB

可变大小的缓冲区,用于保存哪些长度比较大的回复,比如一个非常长的字符串

10、身份验证

客户端authenticated属性0,表示未通过身份验证,1表示通过身份验证

11、时间属性

ctime 表示创建客户端时间,可以计算出客户端已经创建多久

lastinteraction,最后一次互动时间,可以计算空转idle时间

12、创建普通客户端,服务器会将新的客户端状态添加到客户端clients链表的末尾

13、关闭客户端

关闭条件

客户端进程退出或者被杀死

客户端发送带有不符合协议格式的命令请求

客户端成为了client kill命令目标

服务器如果设置了timeout,客户端空转时间超过,将被关闭。例外的情况pub sub

客户端命令回复超过了输出缓冲区大小

硬性限制大小,超出即关闭

软性限制大小,超出,记录时间,时长达到设定的时长一直超出,被关闭

相关文章

网友评论

      本文标题:redis(12)客户端

      本文链接:https://www.haomeiwen.com/subject/wncvyctx.html