python redis pipeline_深入Redis之 pipeline流水线 (三)

pipeline (流水线)

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

情景1:

客户端如果想获取或者设置多个key,可以发送多次get,set命令。

但是每次命令从客户端传到redis服务端都要消耗网络时间。发送n次会消耗n次网络时间。

客户端等待的时间 = n次网络时间+n次命令时间(包括命令排队时间和执行时间)

837a2c3a6c1bb172e81ce21223d676ef.png

解决方法:使用mget或者mset,只发送了一次命令

客户端等待的时间 = 1次网络时间+n次命令时间(包括命令排队时间和执行时间)

情景2:

客户端要执行多个命令,如hget,get,set,lpush这四个命令。此时无法向mget一样用一条命令代替多条命令。

所以

客户端等待的时间 = n次网络时间+n次命令时间(包括命令排队时间和执行时间)

1ecda92798b3882f3e677687fcc45488.png

解决方法:使用pipeline,可以将上述4条命令打包并一次性发送给服务端批量处理。

客户端等待的时间 = 1次网络时间+n次命令时间(包括命令排队时间和执行时间)

这就是pipeline的应用场景。

注意点:

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

10cfd7bb3b20471a81bc804f6aef8af3.png

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

这也凸显出pipeline的重要性。

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

70a4868af5749b6bda3b1e7cdbce529d.png

M操作

2992958f7128981bb68785c83c1b8423.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值