Redis客户端

Redis服务器是典型的一对多服务器程序: 一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端回复命令。Redis使用单线程单进程的方式处理命令请求,并与多个客户端进行网络通信。

每个与服务器建立连接的客户端都会被保存在服务器的redisClient结构中,多个客户端在服务器端以链表的形式进行存储。我们来了解下保存了客户端的哪些基本信息。

套接字描述符
Redis的网络连接是基于socket实现的,而fd又分为两种类型: 可以是-1或者大于-1的值。
·当fd为-1时,说明是客户端是一个伪客户端,用于实现aof文件的读取或者实现lua脚本。
·当fd为大于-1的整数时,说明是普通的客户端。

名字
客户端默认是没有名字的,但我们可以通过Client setname赋予不同的名字给不同的客户端,使连接更加清晰。

标志
客户端的flag属性记录了客户端的角色:
· 在主从服务器进行复制操作时,主服务器会成为从服务器的客户端,而从服务器也会成为主服务器的客户端。REDIS_MASTER表示客户端代表的是一个主服务器,REDIS_SLAVE表示客户端代表的是一个从服务器。
· REDIS_PRE_PSYNC标志表示客户端代表的是一个低于版本Redis2.8的从服务器,主服务器不能使用PSYNC命令与这个从服务器进行同步。这个标志只能在REDIS_SLAVE标志处于打开的时候用。
· REDIS_LUA_CLIENT表示客户端是专门用于处理Lua脚本的伪客户端。
· REDIS_MONITOR标志表示客户端正在执行MONITOR命令
· REDIS_UNIX_SOCKET表示服务器正在使用UNIX套接字来连接客户端。
· REDIS_BLOCKED标志客户端正在被BRPOP、BLPOP等命令阻塞。
· REDIS_UNBLOCKED标志表示客户端已经从REDIS_BLOCKED标志所表示的阻塞状态中脱离出来,不在阻塞。
· REDIS_MULTI标志表示客户端正在执行事务。
· REDIS_DIRTY_CAS标志表示事务使用WATCH命令监视的数据库键已经被修改,REDIS_DIRTY_EXEC标志表示事务命令在入队时出现了错误,以上两个标志都表示事务的安全性已被破坏。
· REDIS_CLOSE_ASAP标志表示客户端的输出缓冲区大小已经超过了服务器允许的范围,服务器会在下一次运行serverCron函数时关闭这个客户端。
· REDIS_CLOSE_AFTER_REPLY标志表示有用户对这个客户端执行了CLIENT KILL命令,或者客户端发送给服务器的命令请求中包含了错误的协议内容。服务器会将客户端积存在输出缓冲区中的所有内容发送给客户端,然后关闭客户端。
· REDIS_ASKING 标志表示客户端向集群节点发送了ASKING命令。

输入缓冲区querybuf
用于保存客户端发送的命令请求,输入缓冲区大小会根据输入内容动态缩写或扩大,但它的最大大小不能超过1GB,否则服务器将关闭这个客户端。

输出缓冲区
执行命令所得的命令回复会被保存在客户端状态的输出缓冲区里面,每个客户端都有两个输出缓冲区可用:一个是固定大小的缓冲区,另一个是可变大小的缓冲区。
·固定大小的缓冲区: 用于保存那些长度较小的回复,比如OK、简短的字符串、整数、错误回复等。默认为16KB
·可变大小缓冲区用于保存那些长度表较大的回复,比如一个非常长的字符串值,一个由很多项组成的列表,一个包含很多元素的集合等等。

身份验证
客户端的authenticated属性用于记录客户端是否通过了身份验证: 若authenticated为0,表示客户端未通过身份验证;若authenticated为1,表示客户端已经通过了身份验证。

时间
·ctime属性记录了客户端创建的时间,即客户端连接服务器已经经过了多少秒。
·lastinteraction属性记录了客户端和服务器最后一次交互的时间,可以进一步得出客户端的空转时间。
·obuf_soft_limit_reached_time记录了输出缓冲区第一次到达软限制的时间。

前面我们直到,输出缓冲区由 固定大小的输出缓冲区和可变大小的输出缓冲区。理论上来说可变的输出缓冲区是无限大的,但是为了防止过度占用服务器端的资源,会对输出缓冲区执行相应的限制操作:
·硬性限制: 如果输出缓冲区的大小超过了硬性限制所设置的大小,那么服务器将立即关闭客户端。
·软性限制: 如果输出缓冲区的大小超过了软性限制设置的大小,但没超过硬性设置的大小,那么将记录客户端到达软性限制的时间,只会服务器会持续监视客户端,如果客户端一直超过软性限制的大小并且超过服务器限制的时长,服务器将关闭客户端;反之,若在指定时间内不再超出软性限制,客户端就不会被关闭,并且刷新obuf_soft_limit_reached_time属性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值