目前来看,redis的管道机制的实现是通过使用批量操作进行发送命令和返回,其结果可以称为 Round Trip Time (RTT,往返时间)。
在Redis中提供了批量操作命令,例如mget、mset等,有效地节约了RTT。但是大部分命令是不支持批量操作的。
为此,Redis提供了一个称为管道(Pipeline) 的机制将一组Redis命令进行组装,通过一次 RTT 传输给 Redis,再将这些 Redis 命令的执行结果按顺序传递给客户端。即使用pipeline执行了n次命令,整个过程就只需要一次 RTT。
它的好处来源于管道机制,Pipeline管道机制不单单是为了减少RTT的一种方式,它实际上大大提高了Redis的QPS。原因是,在没有使用管道机制的情况下,从访问数据结构和产生回复的角度来看,为每个命令提供服务是非常便宜的。
但是从底层套接字的角度来看,这是非常昂贵的,这涉及read()和write()系统调用,从用户态切换到内核态,这种上下文切换开销是巨大。
而使用Pipeline的情况下,通常使用单个read()系统调用读取许多命令,然后使用单个write()系统调用传递多个回复,这样就提高了QPS。
简而言之,就是提升了运行的速度以及效果。其中,QPS(Query Per Second)就是数据运行的一个重要指标,QPS 其实是衡量吞吐量(Throughput)的一个常用指标,就是说服务器在一秒的时间内处理了多少个请求。