zoukankan      html  css  js  c++  java
  • redis--pipelining管道

    请求/响应协议和RTT

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务;

    这意味着通常情况下会遵循以下步骤:

    1.客户端向服务端发送一条查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应;

    2.服务端处理命令,并将结果返回给客户端;

    redis的数据包从客户端到达服务端,在从服务端到达客户端,这个时间被称之为RTT(round trip time-往返时间)。

    问题:假设RTT时间是250毫秒,即使服务器每秒能处理100k的请求数据,但是我们每秒只能处理4个请求;

    解决方法:Redis管道(Pipelining)

    管道的概念:在一次请求/响应中,服务端能实现处理新的请求即使旧的请求没有响应,这样就可以将多个命令发送到服务端,而不用等待回复,到最后一起回复;

    使用管道的技术,就可以在一个RTT时间内,处理更多的请求;

    注意的问题:使用管道发送命令时,服务端会返回一个队列,占用很多内存;所以,如果你需要发送大量的命令,最好分批处理;

    管道(Pipelining) VS 脚本(Scripting)

    大量 pipeline 应用场景可通过 Redis 脚本(Redis 版本 >= 2.6)得到更高效的处理,后者在服务器端执行大量工作。脚本的一大优势是可通过最小的延迟读写数据,让读、计算、写等操作变得非常快(pipeline 在这种情况下不能使用,因为客户端在写命令前需要读命令返回的结果)。

    应用程序有时可能在 pipeline 中发送 EVAL 或 EVALSHA 命令。Redis 通过 SCRIPT LOAD 命令(保证 EVALSHA 成功被调用)明确支持这种情况。

  • 相关阅读:
    Kubernetes Python Client 初体验之安装授权
    用Ubuntu和树莓派系统部署kubernetes集群后的一些心得
    OpenWrt下基于OLSR的Ad-Hoc组网实现网络摄像头多节点访问
    KVM初体验之virt-manager unable to connect to libvirt的处理办法
    oracle参数和日志文件
    trigger
    package
    function
    procedure
    oracle异常处理
  • 原文地址:https://www.cnblogs.com/smailjunk/p/10650881.html
Copyright © 2011-2022 走看看