管道

作者: 时海观察者 | 来源:发表于2018-12-27 16:13 被阅读0次

    请求和响应模型

    简介

    Redis使用C-S架构、架设在TCP之上,也就是请求/响应模型。

    这意味着Redis完成一次请求的步骤如下:

    • 客户端

      1. 用户空间,制作请求信息
      2. 内核空间,调用write()发送请求
      3. 内核空间,调用read()被阻塞
      4. 内核空间,调用read()读取请求
      5. 用户空间,处理响应
    • 服务器端

      1. 内核空间,调用read()读取请求
      2. 用户空间,处理请求,制作响应信息
      3. 内核空间,调用write()发送请求
      4. 用户空间,做一些其他处理
      5. 内核空间,调用read()被阻塞

    示例

    • Client: INCR X
    • Server: 1
    • Client: INCR X
    • Server: 2
    • Client: INCR X
    • Server: 3
    • Client: INCR X
    • Server: 4

    管道

    简介

    在上述的请求和响应模型中,性能瓶颈主要在于:

    • 网络延时
    • 客户端阻塞等待
    • 上下文切换

    而Redis的管道技术,就是:

    • 客户端:一次性发送多个请求,等待响应,一次性读取所有响应
    • 服务器端:一次性读取所有请求,挨个执行请求并将响应缓存,最后发送所有响应

    示例

    • Client: INCR X
    • Client: INCR X
    • Client: INCR X
    • Client: INCR X
    • Server: 1
    • Server: 2
    • Server: 3
    • Server: 4

    优点

    • 不需要等待前一个请求的回复,就可以发送下一个请求
    • 减轻了上下文切换的成本,一次read()write()调用就读取多个请求和发送了多个响应。

    注意
    需要控制好请求的batch-size,因为服务器端将响应缓存在内存中。

    相关文章

      网友评论

        本文标题:管道

        本文链接:https://www.haomeiwen.com/subject/hcxdlqtx.html