深入Redis之 pipeline流水线 (三)-张柏沛IT博客

正文内容

深入Redis之 pipeline流水线 (三)

栏目:Linux 发布时间:2020-02-23 15:00 浏览量:285

pipeline (流水线)


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

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


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


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


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


这就是pipeline的应用场景。

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


redis的处理速度是微秒级别,而网络传输的速度是毫秒级别,远远慢于redis的处理速度。所以在使用redis时,网络速度会成为redis的一个瓶颈,节省网络传输的时间得到的收益会远高于节省命令执行时间的收益。
这也凸显出pipeline的重要性。


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


M操作



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命令的返回值

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > 深入Redis之 pipeline流水线 (三)

热门推荐
推荐新闻