命令执行
Redis客户端执行一条命令分为以下四个步骤:
- 发送命令
- 命令排队
- 命令执行
- 返回结果
其中,第一步加第四步称为Round Trip Time(RTT,往返时间)。
性能瓶颈
Redis提供了批量操作命令(例如mget
、mset
等),有效的节约了RTT,但大部分命令是不支持批量操作的。由于Redis命令执行本身是很快的(微妙级别),而发送命令以及返回结果的网络耗时往往更大,所以说Redis的性能瓶颈其实是网络。
Pipeline机制
Pipeline机制能改善上面这类问题,它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将这组Redis命令按照顺序执行并装填结果返回给客户端。
Pipeline虽然好用,但是每次Pipeline组装的命令个数不能没有节制,否则一次组装Pipeline数据量过大,一方面会增加客户端的等待时机,另一方面会造成一定的网络阻塞,可以将一次包含大量命令的Pipeline拆分成多次较小的Pipeline来完成。
对比原生批量命令
- 原生批量命令是原子性,Pipeline是非原子性的。
- 原生批量命令是一个命令对应多个key,Pipeline支持多个命令。
- 原生批量命令是Redis服务端支持实现的,而Pipeline需要服务端与客户端的共同实现。