Redis——客户端

客户端

1,对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redis.h/redisClient结构来存储客户端的状态。
服务器结构中用一个链表来保存与该服务器相连接的所有客户端。
2,下面介绍客户端的属性
1)套接字描述符fd:其实是-1的时候代表是伪客户端。伪客户端的命令请求来源于AOF文件或者Lua脚本,而不是网络。普通客户端的fd属性的值为大于1的整数。服务器使用fd大于1的套接字与客户端进行通信。
2)名字:默认情况下,一个链接到服务器的客户端是没有名字的,但是可以通过setname命令设置。名字可以让客户端的身份更清晰。
3)标志:记录了客户端的角色,以及客户端目前所处的状态。这个标志可以是哪些值,分别有什么含义,可以参考官方文档,这些标志定义在redis.h文件中
4)输入缓冲区querybuf:用于保存客户端发送命令的请求,输入缓冲区的大小会根据输入内容动态地缩小或扩大,但它的最大大小不能超过1GB
5)命令与命令参数:在服务器将客户端的命令请求保存到客户端状态的querybuf属性之后,服务器将对命令请求的内容进行分析,并将得出的命令参数以及命令参数的个数分别保存到客户端状态的argv属性和argc属性。
6)命令的实现函数:完成第5)之后,服务器将根据项argv[0]的值,在命令表中查找命令所对应的命令实现函数。
7)输出缓冲区:执行命令所得的命令回复被保存在客户端状态的输出缓冲区里面,每个客户端都有两个输出缓冲区,一个大小是固定的(数组结构,保存较小的回复),另一个的大小是可变的(链表结构,保存较大的回复)。
8)身份验证:authenticated属性用于记录客户端是否通过了身份验证,0表示未通过验证,这时除了AUTH命令之外,客户端发送的所有其他命令都会被服务器拒绝执行,1表示通过验证。
9)时间:ctime计算客户端与服务器已经连接了多少秒。
lastinteraction属性记录了客户端与服务器最后一次进行互动的时间
obuf_soft_limit_reached_time属性记录了输出缓冲区第一次到达软性限制的时间
3,服务器会在初始化时创建负责执行Lua脚本中包含的Redis命令的伪客户端,并将这个伪客户端关联在服务器状态结构的lua_client属性中。这个伪客户端在服务器运行的整个生命期中会一直存在,只有服务器被关闭时,这个客户端才会被关闭。
4,服务器在载入AOF文件时,会创建用于执行AOF文件包含的Redis命令的伪客户端,并在载入完成之后,关闭这个伪客户端。

猜你喜欢

转载自blog.csdn.net/xiaoan08133192/article/details/115356324