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