温馨提示:
本文最后更新于
2022-4-23,已超过半年没有更新,若内容或图片失效,请留言反馈。
Pipeline
: 顾名思义, 流水线(管道)的意思。为什么要讨论它呢? (可能是因为它比较香吧)
在 Redis
的操作命令里其实并没有 pipeline
, 但是 Redis
又支持 pipeline
的, 而且在各个语言的 Client
中都有相关的实现。
需要注意的是集群模式
对于 Pipeline
不太友好,因为 Pipeline
要操作的 key 可能在不同的哈希槽上,此时就需要进行请求的转发,但是这是与 Pipeline
的思想相违背的,所以集群模式下不太支持使用 Pipeline
的操作。
我们不妨先看看平时操作 Redis
命令的执行流程:
那么执行N次命令就需要:
N 次时间 = N 次网络时间 + N 次命令时间
可以看到,如果执行 N 次的话(比如 N 次 set 操作),时间开销是非常大的。不过似乎也符合常理, 因为平时不都是这么操作的吗? 那可能只是因为没考虑网络开销。
由于命令时间非常短, 影响时间开销的主要是网络时间。而 Pipeline
正是解决了网络开销问题, 客户端缓冲一堆需要执行的命令(命令排队), 然后一次发送执行。这样的话,时间开销就变为:
1 次
Pipeline
(N 条命令) = 1 次网络时间 + N 次命令时间
是不是很棒! 但是需要注意的是: Pipeline
里的操作命令不能过多, 否则会影响客户端的等待时间, 影响网络性能。
写到最后, 本文的目的其实并不是告诉读者 Redis
的 Pipeline
操作, 而是能 Get 到其中的设计思想才是重中之重。在设计模式中也有类似思想, 感兴趣的可以研究下 管道模式
。
评论一下?