Redis客户端的属性、创建和关闭(伪客户端)

1. 概括

  • Redis服务器是一对多服务器程序,一个服务器可以与多个客户端建立网络连接
  • Redis的文件事件是由I/O多路复用技术实现的,Redis服务程序使用单线程单进程的方式处理命令请求,与多个客户端进行网络通信
  • 服务器会为相连接的客户端建立redisClient结构,来记录客户端的状态信息等。

redisClient结构包含:

  • 客户端的套接字描述
  • 客户端的名字
  • 客户端的标志值
  • 指向客户端正在使用的数据库的指针,以及该数据库的号码
  • 客户端的输入和输出缓冲区
  • 客户端的复制状态信息
  • 客户端的身份验证等
  • 多个redisClient是以链表的形式存在服务器中的,redisServer中的clients指针指向这个链表

2 客户端属性

默认情况下,连接到服务器的客户端是没有名字的指向,NULL指针,可自己设置。

2.1 套接字描述符

客户端状态的 fd 属性记录了客户端正在使用的套接字描述符:

typedef struct redisClient {
    // ...
    int fd;
    // ...
} redisClient;
  • 伪客户端(fake client)的 fd 属性的值为 -1 : 伪客户端处理的命令请求来源于 AOF 文件或者 Lua 脚本, 而不是网络, 所以这种客户端不需要套接字连接, 自然也不需要记录套接字描述符。 目前 Redis 服务器会在两个地方用到伪客户端, 一个用于载入 AOF 文件并还原数据库状态, 而另一个则用于执行 Lua 脚本中包含的 Redis 命令。
  • 普通客户端的 fd 属性的值为大于 -1 的整数: 普通客户端使用套接字来与服务器进行通讯, 所以服务器会用 fd 属性来记录客户端套接字的描述符。 因为合法的套接字描述符不能是 -1 , 所以普通客户端的套接字描述符的值必然是大于 -1 的整数。

2.2 标志

客户端的标志属性 flags 记录了客户端的角色(role), 以及客户端目前所处的状态,可由多个二进制表示。

typedef struct redisClient {
    // ...
    int flags;
    // ...
} redisClient;
<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值