• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Redis > Redis教程(十三):管线详解

Redis教程(十三):管线详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了redis配置文件详解,redis详解,redis内部结构详解,redis info详解,redis命令详解等相关知识,希望本文的分享对您有所帮助

一、请求应答协议和RTT:

    Redis是一种典型的基于C/S模型的TCP服务器。在客户端与服务器的通讯过程中,通常都是客户端率先发起请求,服务器在接收到请求后执行相应的任务,最后再将获取的数据或处理结果以应答的方式发送给客户端。在此过程中,客户端都会以阻塞的方式等待服务器返回的结果。见如下命令序列:
     Client: INCR X
    Server: 1
    Client: INCR X
    Server: 2
    Client: INCR X
    Server: 3
    Client: INCR X
    Server: 4
 </div>
    在每一对请求与应答的过程中,我们都不得不承受网络传输所带来的额外开销。我们通常将这种开销称为RTT(Round Trip Time)。现在我们假设每一次请求与应答的RTT为250毫秒,而我们的服务器可以在一秒内处理100k的数据,可结果则是我们的服务器每秒至多处理4条请求。要想解决这一性能问题,我们该如何进行优化呢?
   
二、管线(pipelining):

    Redis在很早的版本中就已经提供了对命令管线的支持。在给出具体解释之前,我们先将上面的同步应答方式的例子改造为基于命令管线的异步应答方式,这样可以让大家有一个更好的感性认识。
      Client: INCR X
    Client: INCR X
    Client: INCR X
    Client: INCR X
    Server: 1
    Server: 2
    Server: 3
    Server: 4
 </div>
    从以上示例可以看出,客户端在发送命令之后,不用立刻等待来自服务器的应答,而是可以继续发送后面的命令。在命令发送完毕后,再一次性的读取之前所有命令的应答。这样便节省了同步方式中RTT的开销。
    最后需要说明的是,如果Redis服务器发现客户端的请求是基于管线的,那么服务器端在接受到请求并处理之后,会将每条命令的应答数据存入队列,之后再发送到客户端。
   
三、Benchmark:

    以下是来自Redis官网的测试用例和测试结果。需要说明的是,该测试是基于loopback(127.0.0.1)的,因此RTT所占用的时间相对较少,如果是基于实际网络接口,那么管线机制所带来的性能提升就更为显著了。
require 'rubygems'
    require 'redis'
   
    def bench(descr)
        start = Time.now
        yield
        puts "#{descr} #{Time.now-start} seconds"
    end
   
    def without_pipelining
        r = Redis.new
        10000.times {
            r.ping
        }
    end
   
    def with_pipelining
        r = Redis.new
        r.pipelined {
            10000.times {
                r.ping
            }
        }
    end
   
    bench("without pipelining") {
        without_pipelining
    }
    bench("with pipelining") {
        with_pipelining
    }
    //without pipelining 1.185238 seconds
    //with pipelining 0.250783 seconds
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Redis教程之代理ip池设计方法详解
  • Redis中的数据过期策略详解
  • 详解在Redis在Centos7上的安装部署
  • 详解用Redis实现Session功能
  • 详解Centos7下配置Redis并开机自启动
  • 详解利用redis + lua解决抢红包高并发的问题
  • 详解Redis用链表实现消息队列
  • 详解Redis中的双链表结构
  • Redis教程(十三):管线详解
  • Redis教程(十):持久化详解

相关文章

  • 2017-05-11redis+mysql+quartz 一种红包发送功能的实现
  • 2017-05-11Redis教程(十二):服务器管理命令总结
  • 2017-05-11Redis中五种数据类型简单操作
  • 2017-05-11redis启动流程介绍
  • 2017-05-11Ubuntu下安装redis的2种方法分享
  • 2017-07-23Redis缓存技术学习系列之事务处理
  • 2017-05-11Redis实现多人多聊天室功能
  • 2017-05-11Redis的Python客户端redis-py安装使用说明文档
  • 2017-05-11Redis教程(十四):内存优化介绍
  • 2017-08-22关于redis启动时报错:Could not get a resource from the pool。

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 浅谈redis的maxmemory设置以及淘汰策略
    • Redis源码剖析和注释(二十二)---Redis复制(replicate)源码详细解析
    • Redis String 类型和 Hash 类型学习笔记与总结
    • 分割超大Redis数据库例子
    • 图文详解Windows下使用Redis缓存工具的方法
    • Redis教程(十二):服务器管理命令总结
    • Redis和Memcached的区别详解
    • Ubuntu下安装redis的2种方法分享
    • Redis上实现分布式锁以提高性能的方案研究
    • 在CenOS系统下安装和配置Redis数据库的教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有