Redis: Pipelining and Multiplexing

 27th May 2022 at 2:30pm

Redis 的多路复用的能力。

参考文档中的两篇文章写得非常好。如果想仔细回顾这个 topic,可以看这两篇。

Redis 在协议设计上是 request-response model(有少量例外),与 HTTP 1 类似。

Pipelining 是指 client 在一个连接上发请求时,请求 1 发完后不等回复 1,马上发请求 2。Redis 不需要额外协议 来支持 pipelining,这是面向流的协议(TCP)本身就有的能力。

Redis 的 multiplexing,是一种隐式的 pipelining。从 client 库的角度看,一个 Redis 的连接可能会被并发地使用,比如多个线程(StackExchange.Redis 库)同时使用一个连接。对于 StackExchange.Redis 库,它在库层面上实现了 multiplexing,即线程 1 和线程 2 在共享同一个连接的情况下,可以 同时(concurrently) 发起 Redis 请求,而不需要后发送者等待先发送者收到回包再发。当然库在实现时需要保证每个请求包都是完整写入 TCP 连接中的(而不会穿插有别的请求包的数据)。

参考

See Also