pipeline出现的背景
redis客户端执行一条命令分4个过程:
发送命令-〉命令排队-〉命令执行-〉返回结果
这个过程称为Round trip time(简称RTT, 往返时间),Redis的原生批命令(mget和mset)有效节约了RTT,但大部分命令(如hgetall,并没有mhgetall)不支持批量操作,需要消耗N次RTT ,这个时候需要pipeline来解决这个问题。
pipeline可以将多次IO往返的时间缩减为一次RTT ,前提是pipeline执行的指令之间没有因果相关性。
未使用pipeline执行N条命令:
使用了pipeline执行N条命令:
原生批命令(mset, mget)与Pipeline对比
- 原生批命令是原子性,pipeline是非原子性。pipeline命令中途异常退出,之前执行成功的命令不会回滚。
- 原生批命令一命令多个key, 但pipeline支持多命令(存在事务),非原子性。