侧边栏壁纸
  • 累计撰写 47 篇文章
  • 累计收到 0 条评论

关于 Redis-Pipeline 引发的思考

2022-4-23 / 0 评论 / 207 阅读
温馨提示:
本文最后更新于 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 里的操作命令不能过多, 否则会影响客户端的等待时间, 影响网络性能。

写到最后, 本文的目的其实并不是告诉读者 RedisPipeline 操作, 而是能 Get 到其中的设计思想才是重中之重。在设计模式中也有类似思想, 感兴趣的可以研究下 管道模式

评论一下?

OωO
取消