redis 系列19 客户端

 一. 概述

  Redis服务器是可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用I/O多路复用技术实现的文件事件处理器,Redis服务器使用单进程单线程的方式来处理命令请求,并与多个客户端进行网络通信。

  1.1 伪客户端和普通客户端

    对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redis.h/redisClient结构(客户端状态),这个结构保存了客户端当前的状态信息。根据客户端类型的不同,分为伪客户端和普通客户端。伪客户端处理的命令请求来源于AOF文件或者Lua脚本,而不是网络,这种客户端不需要套接字连接。普通客户端使用套接字与服务器进行通信,下面脚本显示了全部的普通客户端:

复制代码
    127.0.0.1:6379> client list     id=2 addr=127.0.0.1:45090 fd=8 name= age=95 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client     id=3 addr=127.0.0.1:45092 fd=9 name= age=3 idle=3 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=command
复制代码

  上面脚本,当fd为-1时,就是一个伪客户端。普通客户端的fd都大于0。name代表客户端名称,默认为空,可以用client setname命令来设置一个客户端的名字,例如给当前客户端设置名称,以下脚本:

复制代码
    127.0.0.1:6379> client setname client1     OK     127.0.0.1:6379> client list     id=2 addr=127.0.0.1:45090 fd=8 name=client1 age=414 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 
   events=r cmd=client id=3 addr=127.0.0.1:45092 fd=9 name= age=322 idle=322 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0
  events=r cmd=command
复制代码

  

  1.2  flags标志

    flags记录了客户端的角色(role),以及客户端目前所处的状态,flags属性的值可以是单个标志,也可以是多个标志的二进制。客户端 flag 可以由以下部分组成:

属性值

描述

O

客户端是 MONITOR 模式下的附属节点(slave)

S

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信