命令执行

Redis客户端执行一条命令分为以下四个步骤:

  1. 发送命令
  2. 命令排队
  3. 命令执行
  4. 返回结果

其中,第一步加第四步称为Round Trip Time(RTT,往返时间)。

性能瓶颈

Redis提供了批量操作命令(例如mgetmset等),有效的节约了RTT,但大部分命令是不支持批量操作的。由于Redis命令执行本身是很快的(微妙级别),而发送命令以及返回结果的网络耗时往往更大,所以说Redis的性能瓶颈其实是网络。

Pipeline机制

Pipeline机制能改善上面这类问题,它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将这组Redis命令按照顺序执行并装填结果返回给客户端。

Pipeline虽然好用,但是每次Pipeline组装的命令个数不能没有节制,否则一次组装Pipeline数据量过大,一方面会增加客户端的等待时机,另一方面会造成一定的网络阻塞,可以将一次包含大量命令的Pipeline拆分成多次较小的Pipeline来完成。

对比原生批量命令

  • 原生批量命令是原子性,Pipeline是非原子性的。
  • 原生批量命令是一个命令对应多个key,Pipeline支持多个命令。
  • 原生批量命令是Redis服务端支持实现的,而Pipeline需要服务端与客户端的共同实现。

参考资料