美文网首页
使用Redis pipeline加速Redis查询

使用Redis pipeline加速Redis查询

作者: 炎族族长炎天帝 | 来源:发表于2020-03-30 21:30 被阅读0次

    写在前面

    Redis是一个请求响应模型的TCP 服务,简单来说,客户端发送一个查询给服务端,然后服务端执行,将结果返回给客户端,期间客户端是阻塞状态,如下图

    image.png image.png

    其中往返时长RTT(Round Trip Time)= Time1 + Time2,可以看到,如果客户端端发送N个请求,那么就会有N*Time1+N*Time2的耗时在上面。

    假设RTT为250ms,就算服务端每秒可以处理10W个请求,但是在单线程的情况下客户端每秒最多只能处理4个请求(250*4=1000ms),这很容易成为瓶颈。

    优化思路就是减少RTT,采用的方案就是利用Redis的Pipeline

    Redis pipeline

    简单来说,Redis pipeline的原理就是将多个请求打包在一个TCP包中发给服务端处理,然后再一同读取结果。如下图:


    image.png

    pipeline的好处不只是减少了RTT,因为Socket/IO涉及到read()和write()的系统调用,而这种调用又会涉及到用户态和内核态的切换,这种切换也是一种很大的开销。

    需要注意什么?

    pipeline执行的结果会缓存在服务端,可以说是利用空间换时间的典型,所以,我们在打包发送命令的时候,要注意一次发送命令的数量不要太多。

    参考资料

    https://redis.io/topics/pipelining

    https://www.alibabacloud.com/help/zh/doc-detail/26369.htm

    https://redis.io/topics/pipelining

    https://blog.csdn.net/u011489043/article/details/78769428

    https://www.jianshu.com/p/7d7175e4616a

    https://developpaper.com/redis-uses-pipeline-to-speed-up-query-speed/

    https://developpaper.com/redis-throughput-enhancement-through-pipeline/

    相关文章

      网友评论

          本文标题:使用Redis pipeline加速Redis查询

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