Skip to content

redis的客户端和服务器

一、客户端

redis是典型的一个一对多服务器程序:一个服务器可以与多个客户端进行网络连接,每个客户端都可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令指令,并向客户端返回命令回复

与服务器连接

通过使用I/O多路复用技术实现的文件事件处理器,redis服务器使用单线程单线程的方式来处理命令请求,并与多个客户端进行网络通信。

对于与每个服务器连接的客户端,服务器都为这些客户端建立了相应的redis.h/redisClient结构(客户端状态),这个结构保存了客户端当前的状态信息,以及执行相关功能时需要用到的数据结构,其中:

  • 客户端的套接字描述符
  • 客户端的名字
  • 客户端的标志值(flag)
  • 指向客户端正在使用数据库的指针,以及该数据库的号码
  • 客户端当前要指向的命令、命令的参数、命令参数的个数,以及指向命令实现函数的指针
  • 客户端的输入缓冲区和输出缓冲区
  • 客户端的复制状态信息,以及进行复制所需的数据结构
  • 客户端执行BRPOP、BLPOP等列表阻塞命令时使用的数据结构
  • 客户端的事务状态,以及执行watch命令时用到的数据结构
  • 客户端执行发布与订阅功能用到的数据结构
  • 客户端身份验证标志
  • 客户端的创建时间,客户端与服务端最后一次通信的时间

二、服务器

redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转。

服务器命令请求执行过程,如客户端发送 set key value命令:

  1. 客户端向服务器发送命令请求 set key value
  2. 服务器接收并处理客户端发来的命令请求 set key value ,在数据库中进行操作,并产生命令回复ok
  3. 服务器将命令回复ok发送给客户端
  4. 客户端接收服务器返回的命令回复ok,并将这个回复打印

三、redis命令处理

redis的命令处理的简单流程