redis之pipeline的分析与使用

2019-01-09  本文已影响12人  薛云龙

字如其名,pipeline就是管道的意思。管道本身是能够承载流式数据的一个长链路,所以通过管道的字面意思我们能够知道他能够进行事件的缓冲的。

redis客户端与服务器端的交互

Redis其实是一个基于TCP协议的CS架构的内存数据库。所有的操作都是一个request一个response的同步操作。redis每接收到一个命令就会处理一个命令,并同步返回结果。这样带来的问题就是,一个命令就会产生一次RTT(Round Time Trip),这样的话必然会消耗大量的网络IO。

pipeline的出现

为了提高redis的读写能力,所以就有了pipeline的出现,我们对于多个命令执行,不再同步等待每个命令的返回结果。我们会在统一一个时间点来获取response。这样就解决多个RTT的问题
普通请求模型:

image.png
Pipeline请求模型:
image.png
注:图片来源,侵删

当然,通过pipeline我们也不仅仅只是通过减少RTT来提高服务的响应能力,对于redis来说,处理单次redis command所带来的访问数据结果操作和响应客户端操作是没有多少耗费的,但是处理多次redis command除了带来了频繁的网络io,同样需要redis调用多次read() 和write()系统方法,系统方法会将数据从用户态转移到内核态,这样就会对进程上下文有比较大的影响了。
通过pipeline我们将会大大减少这样的操作。
参考文章

pipeline注意点

上一篇 下一篇

猜你喜欢

热点阅读