1.产生背景
-
如何优化频繁命令往外造成的性能瓶颈?
pipline (管道)可以一次性发送多条命令给服务端,服务端依次逐条处理完毕后,通过一条响应一次性将结果返回,通过减少客服端与redis的通信次数,来实现降低往返的延迟时间。pipline实现原理的队列,先进先出的特性保证数据的原始性。
批处理变种优化措施,类似redis原生命令mget,mset
使用
- 新建cmd.txt,加入以下内容
set k1 v1
hset hk1 name zhangsan
lpush list 1 2 3 4 - 执行命令
cat cmd.txt | redis-cli --pipe
总结
1. pipeline与原生批量命令对比
(1)原生批量命令具备原子性,pipeline非原子性
(2)原生命令一次只能执行一种命令,pipeline支持批量执行不同命令
(3)原生命令是服务端实现,而pipeline需要服务端和客户端共同完成
2. pipeline与事物对比
(1)事物具备原子性,pipeline不具备原子性
(2)pipeline一次将多条命令发送到服务端,事物是一条一条的发,事物只有在接收到exec才会执行
(3)执行事物会阻塞其他命令的执行,而pipeline不会。
3.使用管道注意事项
(1)pipeline缓冲的指令只是会依次执行,不保证原子性,如果执行中发生异常,将会执行后续的指令
(2)使用pipline组装的指令不能太多,不然过大,客服端阻塞的时间可能会很久,此时服务端也会被迫回复一个队列的答复,占用服务端内存。