管道可以一次性发送多条命令到服务端,通过减少客户端与redis的通信次数来实现降低往返延时时间,从而对整个Redis的执行不造成其他任何影响。
pipeline与原生批量命令对比
- 原生批量命令如
mset,mget
,天生具有原子性,而管道不具有原子性 - 原生批量命令一次只能执行一种命令,pipeline能批量执行不同命令
- 原生批量命令在服务端实现,pipeline需要服务端和客户端一起实现
pipeline与事务对比
- 事务具有原子性,管道不具有原子性
- 管道一次性发送多条命令到服务器,事务一条条发,事务接收到exec才会执行 ,管道不需要
- 执行事务会阻塞其他命令执行,执行管道中的命令不会。
pipeline注意事项
- pipeline缓冲的指令不保证原子性且依次执行,某条指令发生异常也会继续执行后续的指令
- pipeline中组装命令不能太多,否则也会由于数据量过大阻塞服务端队列。
。。。。。。