3.3.1 Pipeline 概念

Redis 客户端执行一条命令分为如下四个过程:

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

1步骤 + 4步骤称为 Round Trip Time (RTT, 往返时间)

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

image.png

image.png

  1. echo -en '*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n*2\r\n$4\r\nincr\r\
  2. n$7\r\ncounter\r\n' | redis-cli --pipe

3.3.2 性能测试

  • Pipeline 执行速度一般比逐条执行要快
  • 客户端和服务端的网络延时越大, Pipeline 的效果越明显

image.png

3.3.3 原生批量命令与 Pipeline 对比

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

3.3.4 最佳实践

  • 将一次包含大量命令的 Pipeline 拆分成多次较小的 Pipeline 来完成
  • Pipeline 只能操作一个 Redis 实例, 但是即使在分布式 Redis 场景中, 也可以作为批量操作的重要优化手段