管道

请求和响应模型

简介

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,因为服务器端将响应缓存在内存中。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容