通过原理理解为什么Redis的pipeline可以有效提升性能

Redis命令执行的过程

关于Redis服务如何处理每条指令已经有相关文章了,可以移步去看,这里只讨论命令发送之后的流程:

  1. 客户端进程调用write操作将数据写到本地操作系统内核的发送缓冲中
  2. 客户端操作系统内核异步将数据发送到服务端机器
  3. Redis服务端将数据从本地操作系统内核的接收缓冲中取出
  4. 执行Redis命令
  5. 服务端进程调用write操作将数据写到本地操作系统内核的发送缓冲中
  6. 服务端操作系统内核异步将数据发送到客户端机器
  7. 客户端将数据从本地操作系统内核的接收缓冲中取出

上面过程中会有2个耗时点:

  • 当客户端将命令发出后,假如客户端和服务端所在服务器相距很远,那么一次RTT(Round-Trip Time: 往返时延)将会达到毫秒级别,这将严重影响Redis的吞吐量
  • 无论是服务端进程还是客户端进程,调用write操作将数据写到本地操作系统内核的发送缓冲中时,如果发送缓冲满了,就需要等待缓冲空出空闲空间来,这个就是写操作IO操作的真正耗时。

PIPELINE原理

  1. 将多个命令打包组成命令块
  2. 将命令块一次性批量发送给服务端
  3. 服务端依此处理完后将结果集打包
  4. 批量返回所有结果

上面命令只有一次网络往返时延和两次网络IO,所以可以有效提升性能

 

你可能感兴趣的:(redis)