3.3.1 Pipeline 概念
Redis 客户端执行一条命令分为如下四个过程:
- 发送命令
- 命令排队
- 命令执行
- 返回结果
1步骤 + 4步骤称为 Round Trip Time (RTT, 往返时间)
Pipeline (流水线) 机制能改善上面这类问题, 它能将一组 Redis 命令进行组装, 通过一次 RTT 传输给 Redis, 再将这组 Redis 命令的执行结果按顺序返回给客户端
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\
n$7\r\ncounter\r\n' | redis-cli --pipe
3.3.2 性能测试
- Pipeline 执行速度一般比逐条执行要快
- 客户端和服务端的网络延时越大, Pipeline 的效果越明显
3.3.3 原生批量命令与 Pipeline 对比
- 原生批量命令是原子的, Pipeline 是非原子的。
- 原生批量命令是一个命令对应多个key, Pipeline 支持多个命令。
- 原生批量命令是 Redis 服务端支持实现的, 而 Pipeline 需要服务端和客户端的共同实现。
3.3.4 最佳实践
- 将一次包含大量命令的 Pipeline 拆分成多次较小的 Pipeline 来完成
- Pipeline 只能操作一个 Redis 实例, 但是即使在分布式 Redis 场景中, 也可以作为批量操作的重要优化手段