English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Redis 管道技术

Redis ist ein auf dem Client-Servermodell und Anfrage/Protokoll der TCP-Dienste. Dies bedeutet, dass in der Regel ein Request die folgenden Schritte befolgt:

  • der Client eine Abfrageanfrage an den Server sendet und auf die Rückmeldung des Sockets wartet, normalerweise im Blockmodus, bis die Antwort des Servers eintrifft.

  • der Server die Befehle verarbeitet und die Ergebnisse an den Client zurücksendet.

Redis 管道技术

Die Redis-Pipe-Technologie ermöglicht es dem Client, weiter Anfragen an den Server zu senden, wenn der Server nicht reagiert, und schließlich alle Antworten der Serverseite gleichzeitig zu lesen.

Online-Beispiel

Um den Redis-Pipe zu überprüfen, müssen Sie nur den Redis-Dienst starten und die folgenden Befehle eingeben:

$(echo -en "PING\r\n SET w3codeboxkey redis\r\nGET w3codeboxkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3

In den obigen Beispielen verwenden wir PING Befehl, um zu überprüfen, ob der Redis-Dienst verfügbar ist, danach haben wir w3der Wert von codeboxkey ist redis, dann holen wir w3den Wert von codeboxkey setzen und visitor inkrementieren. 3 mal.

In den Ergebnissen können wir sehen, dass diese Befehle gleichzeitig an den Redis-Dienst übermittelt und schließlich alle Antworten der Serverseite gleichzeitig gelesen werden.

管道技术的优势

管道技术的最显著优势是提高了redis服务的性能。

一些测试数据

在下面的测试中,我们将使用支持管道技术特性的Redis的Ruby客户端,测试管道技术对速度的提升效果。

require 'rubygems' 
require 'redis'
定义 bench(descr) 
start = Time.now 
yield 
puts "#{描述} #{Time.now-开始} seconds" 
结束
定义 without_pipelining 
r = Redis.new 
10000 次 { 
    r.ping 
} 
结束
定义 with_pipelining 
r = Redis.new 
r.pipelined { 
    10000 次 { 
        r.ping 
    } 
} 
结束
bench("不使用管道") { 
    without_pipelining 
} 
bench("使用管道") { 
    with_pipelining 
}

从局域网中的Mac OS X系统上执行上述简单脚本的数据表明,开启管道操作后,往返延迟已经降低到相当低的水平。

不使用管道 1.185238 seconds 
使用管道 0.250783 seconds

正如你所见,开启管道后,我们的速度效率得到了提升5倍。