最新动态
联系我们
    尊龙人身就是博旧版现金管材有限公司
    地址:福建省南安市柳城帽山工业区
    邮编:362300
    电话:0595-86361771
    传真:0595-86361773
最新动态当前位置:尊龙人身就是博旧版现金 > 最新动态 >

尊龙人身就是博旧版现金:Redis我国用户组(CRUG)

时间:2018-01-12 11:53:12 作者:尊龙人身就是博旧版现金 浏览:182次

恳求/呼应协议和RTT

Redis是一种根据客户端-效劳端模型以及恳求/呼应协议的TCP效劳。

这意味着一般状况下一个恳求会遵从以下进程:

客户端向效劳端发送一个查询恳求, 并监听Socket回来,一般是以堵塞形式,等候效劳端呼应。

效劳端处理指令,并将成果回来给客户端。

因而,例如下面是4个指令序列履行状况:

Client: INCR X

Server: 1

Client: INCR X

Server: 2

Client: INCR X

Server: 3

Client: INCR X

Server: 4

客户端和效劳器经过网络进行衔接。这个衔接能够很快(loopback接口)或很慢(建立了一个屡次跳转的网络衔接)。不管网络延怎么延时,数据包总是能从客户端抵达效劳器,并从效劳器回来数据回复客户端。

这个时刻被称之为 RTT (Round Trip Time - 往复时刻). 当客户端需求在一个批处理中履行屡次恳求时很简略看到这是怎么影响功用的(例如增加许多元素到同一个list,或许用许多Keys填充数据库)。例如,如果RTT时刻是250毫秒(在一个很慢的衔接下),即便效劳器每秒能处理100k的恳求数,我们每秒最多也只能处理4个恳求。

如果选用loopback接口,RTT就短得多(比方我的主机ping 127.0.0.1只需求44毫秒),但它任然是一笔许多的开支在一次批量写入操作中。

走运的是有一种办法能够改进这种状况。

Redis 管道(Pipelining)

一次恳求/呼应效劳器能完成处理新的恳求即便旧的恳求还未被呼应。这样就能够将多个指令发送到效劳器,而不必等候回复,最终在一个进程中读取该答复。

这就是管道(pipelining),是一种几十年来广泛运用的技能。例如许多POP3协议现已完成支撑这个功用,大大加快了从效劳器下载新邮件的进程。

Redis很早就支撑管道(pipelining)技能,因而不管你运转的是什么版别,你都能够运用管道(pipelining)操作Redis。下面是一个运用的比如:

$ (printf "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379 +PONG +PONG +PONG

这一次我们没有为每个指令都花费了RTT开支,而是只用了一个指令的开支时刻。

十分清晰的,用管道次序操作的第一个比如如下:

Client: INCR X

Client: INCR X

Client: INCR X

Client: INCR X

Server: 1

Server: 2

Server: 3

Server: 4

重要说明: 运用管道发送指令时,效劳器将被逼回复一个行列答复,占用许多内存。所以,如果你需求发送很多的指令,最好是把他们依照合理数量分批次的处理,例如10K的指令,读回复,然后再发送另一个10k的指令,等等。这样速度几乎是相同的,但是在回复这10k指令行列需求十分很多的内存用来安排回来数据内容。

本文尊龙人身就是博旧版现金:Redis我国用户组(CRUG)由尊龙人身就是博旧版现金版权所有
转载请保留原文链接http://www.hswzpx.com /zxdt/159.html