下面主要总结Redis关于管道的一些内容:
1、客户端对Redis进行一次操作,客户端将请求送给服务端,服务端处理完成后,将响应再回复给客户的,要花费一个网络数据包来回的时间
2、如果是多条指令,如下图:
上面图经历了读->写->读->写,四个操作,执行了2条命令
调整读写的顺序 写->写->读->读同样能达到效果,单只需要执行1条命令,这便是管道操作的本质,改变管道中读写指令的顺序就可以大幅节省IO时间
3、深入了解管道
下图为一个请求的交互流程图:
1)客户端进程调用write将消息写到操作系统内核为套接字分配的发送缓冲send buffer。
2)客户端操作系统内核将发送缓冲的内容发送到网卡,网卡硬件将数据通过「网际路由」送到服务器的网卡。
3) 服务器操作系统内核将网卡的数据放到内核为套接字分配的接收缓冲recv buffer。
4)服务器进程调用read从接收缓冲中取出消息进行处理。
5) 服务器进程调用write将响应消息写到内核为套接字分配的发送缓冲send buffer。
6) 服务器操作系统内核将发送缓冲的内容发送到网卡,网卡硬件将数据通过「网际路由」送到客户端的网卡。
7) 客户端操作系统内核将网卡的数据放到内核为套接字分配的接收缓冲recv buffer。
8) 客户端进程调用read从接收缓冲中取出消息返回给上层业务逻辑进行处理。
9) 结束。
4、pipeline通过减少客户端与redis的通信次数来实现降低往返延时时间,而且Pipeline 实现的原理是队列,是可以把多条指令放入到一个tcp报文一起发送,server则将三条命令的处理结果放到一个tcp报文返回。