请求和响应模型
简介
Redis使用C-S架构、架设在TCP之上,也就是请求/响应模型。
这意味着Redis完成一次请求的步骤如下:
-
客户端
- 用户空间,制作请求信息
- 内核空间,调用
write()
发送请求 - 内核空间,调用
read()
被阻塞 - 内核空间,调用
read()
读取请求 - 用户空间,处理响应
-
服务器端
- 内核空间,调用
read()
读取请求 - 用户空间,处理请求,制作响应信息
- 内核空间,调用
write()
发送请求 - 用户空间,做一些其他处理
- 内核空间,调用
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
,因为服务器端将响应缓存在内存中。
网友评论