深入Redis学习教程之pipeline (流水线)简明教程

作者 : IT 大叔 本文共986个字,预计阅读时间需要3分钟 发布时间: 2020-10-19

pipeline (流水线)

流水线是能够帮助客户端将多条命令打包一起发送给服务端的工具。

情景1:
客户端如果想获取或者设置多个key,可以发送多次get,set命令。
但是每次命令从客户端传到redis服务端都要消耗网络时间。发送n次会消耗n次网络时间。
客户端等待的时间 = n次网络时间+n次命令时间(包括命令排队时间和执行时间)

深入Redis学习教程之pipeline (流水线)简明教程插图

解决方法:使用mget或者mset,只发送了一次命令
客户端等待的时间 = 1次网络时间+n次命令时间(包括命令排队时间和执行时间)

情景2:
客户端要执行多个命令,如hget,get,set,lpush这四个命令。此时无法向mget一样用一条命令代替多条命令。
所以
客户端等待的时间 = n次网络时间+n次命令时间(包括命令排队时间和执行时间)

深入Redis学习教程之pipeline (流水线)简明教程插图(2)

解决方法:使用pipeline,可以将上述4条命令打包并一次性发送给服务端批量处理。
客户端等待的时间 = 1次网络时间+n次命令时间(包括命令排队时间和执行时间)

这就是pipeline的应用场景。

注意点:
a.使用redis时,网络会成为redis的一个瓶颈

深入Redis学习教程之pipeline (流水线)简明教程插图(4)
redis的处理速度是微秒级别,而网络传输的速度是毫秒级别,远远慢于redis的处理速度。所以在使用redis时,网络速度会成为redis的一个瓶颈,节省网络传输的时间得到的收益会远高于节省命令执行时间的收益。
这也凸显出pipeline的重要性。

b.M操作是原子性的,而pipeline不是原子性的。

深入Redis学习教程之pipeline (流水线)简明教程插图(6)

M操作

深入Redis学习教程之pipeline (流水线)简明教程插图(8)

pipeline操作

mget在等待队列和执行命令是作为一个命令来执行。
而pipline中打包的命令不会作为一个命令一次性执行,而拆分回原来n个命令一一执行

c.pipeline每次携带的命令数量不能太多,如果有很多命令,可以使用多个pipeline传输。
如 10000个命令,可以使用10个pipeline分批传输。

d.pipline每次只能作用于一个redis节点

pipeline如何使用,每个客户端都不同。这里贴出Python使用pipeline的方式:

import redis 
r = redis.Redis("127.0.0.1",6379)
pipe = r.pipeline()
pipe.set("name","zbp")
pipe.get("name")
res = pipe.execute()
print(res)

返回的结果是一个列表,元素是每一条redis命令的返回值

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 深入Redis学习教程之pipeline (流水线)简明教程

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论