深入学习Redis(二)对pipeline的理解

一、redis中的RTT

RTT,round trip time, 即往返时间,指的是一个请求响应的时间。redis的通信协议是基于tcp的请求/响应协议,在发送一个请求,读取到响应后才可以发送下一个请求,整个来回的时间即为RTT。

假如一个RTT的时间为250ms,那么1s内redis只能处理4个命令,这大大浪费了redis高qps的能力。


二、pipeline原理

redis中的pipeline实现原理,是让客户端在请求未得到响应时,依然可以发送下一个请求,这样多个命令就可以如同批次一样到达服务端,服务端按顺序进行处理,最后统一响应。

这里,为了能够实现统一响应,redis会将请求结果放入缓存队列中。这个缓存队列是占据服务器内存的,所以每次pipeline中的命令不能过大,否则会导致服务器内存占用过高。


三、socket I/O开销

除了RTT方面的优化,使用pipeline还可以减少socket I/O方面的调用。

每个请求/响应都需要调用系统的read()和write()命令,将数据在用户空间和内核空间内来回复制,这个时间远远大于服务器处理命令的时间,如果使用pipeline,则多个请求只需要进行一次socket IO,从而大大提高服务器的qps。根据官方文档给出的示例,随着pipeline中命令数的增加,最终redis的qps将达到未使用pipeline的十倍。


四、总结

pipeline从两方面提高查询效率

  • 通过改变请求响应的顺序,减少总的RTT
  • 减少 socket IO次数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值