使用教程(十三):管道的详细解释

使用教程(十三):管道的详细解释
1。请求-响应协议和RTT:

redis是基于C/S模式的一个典型的TCP服务器。在沟通的过程中客户端和服务器端,客户端通常率先发起的请求,执行相应的任务,服务器接收请求后,最后将采集到的数据或处理结果回复客户。在这个过程中,客户在一个封锁的方式等待服务器返回的结果。看到下面的命令序列:

复制代码代码如下所示:

客户:增加X

服务器:1

客户:增加X

服务器:2

客户:增加X

服务器:3

客户:增加X

服务器:4
在请求和响应的每一对,我们要承担网络传输额外的开销。通常我们称这种开销的RTT(往返时间)。现在我们假设每个请求和响应时间是250毫秒,和我们的服务器可以在一秒钟100k数据的过程,但结果是,我们的服务器流程4每秒的请求数。为了解决这个问题,我们应该如何优化
二、管道(流水线):

Redis已经在一个非常早期的版本命令管道提供支持。在给出具体的解释,我们首先将上述同步响应模式为一个基于命令行的异步响应模式,这将给你一个更好的感性认识。

复制代码代码如下所示:

客户:增加X

客户:增加X

客户:增加X

客户:增加X

服务器:1

服务器:2

服务器:3

服务器:4
从上面的例子中,我们可以看到,在发送命令,客户端可以不等待来自服务器的回复,但可以继续发送以下命令后,发送命令,所有的命令都会再次阅读之前回答。这节省了在同步模式下的成本。

最后,需要说明的是,如果Redis服务器发现客户端的请求是基于管道,然后服务器端将收到的每一个命令的应答数据并发送给客户端接收请求,处理后。
三,基准:

以下是从Redis官网的测试用例和测试结果。需要说明的是,这个测试是基于环回(127.0.0.1),因此RTT占用更少的时间。如果是基于实际的网络接口,那么管道机构的性能改进将更为重要。

复制代码代码如下所示:

require'rubygems

require'redis
替补席(描述)

起始时间



提出# {说明} # { }秒时间。现在开始

终点
DEF without_pipelining

R = redis.new

{ 10000.times

r.ping

}

终点
DEF with_pipelining

R = redis.new

r.pipelined {

{ 10000.times

r.ping

}

}

终点
工作台(没有管道){

without_pipelining

}

工作台(管道){

with_pipelining

}

没有流水线1.185238秒

使用流水线0.250783秒

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部