redis(12)客户端

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服务器是一个事件驱动程序,服务器需要处理两类事件: 1)文件事件(file event)Red...
    稻壳_be03阅读 3,593评论 0 0
  • Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请...
    猪大金阅读 3,073评论 0 0
  • 本文主要介绍Redis客户端实现,包括客户端状态,与服务器的交互等内容。 Redis是一对多服务器程序,通过使用由...
    wenmingxing阅读 3,590评论 0 2
  • Redis服务器是典型的一对多服务器程序,一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请...
    HRADPX阅读 3,780评论 0 0
  • 客户端 Redis服务器是一对多服务器程序,对于每个与服务器连接的客户端,服务器都为这些客户端建立了相应的redi...
    来年花惜阅读 3,418评论 0 0