redis管道(Pipeline)

  Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

  • 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
  • 服务端处理命令,并将结果返回给客户端。

  Redis完整的请求交互流程图如下:

 

  • 客户端进程调用 write 将消息写到操作系统内核为套接字分配的发送缓冲 sendbuffer
  • 客户端操作系统内核将发送缓冲的内容发送到网卡,网卡硬件将数据通过「网际路由」送到服务器的网卡
  • 服务器操作系统内核将网卡的数据放到内核为套接字分配的接收缓冲 recv buffer
  • 服务器进程调用 read 从接收缓冲中取出消息进行处理。
  • 服务器进程调用 write 将响应消息写到内核为套接字分配的发送缓冲 send buffer
  • 服务器操作系统内核将发送缓冲的内容发送到网卡,网卡硬件将数据通过「网际路由」送到客户端的网卡
  • 客户端操作系统内核将网卡的数据放到内核为套接字分配的接收缓冲 recv buffer
  • 客户端进程调用 read 从接收缓冲中取出消息返回给上层业务逻辑进行处理。

  Redis 管道技术可以在服务端未响应时,客户端可以持续向服务端发送请求(当 client 使用 pipelining 发送命令时,redis server 必须将部分请求放到队列中),并最终一次性读取所有服务端的响应。

 

参考: https://zhuanlan.zhihu.com/p/64381987

原文地址:https://www.cnblogs.com/ryjJava/p/14269087.html