English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Redis è un servizio TCP basato su modello client-server e protocollo di richiesta/risposta. Questo significa che di solito un richiesto segue i seguenti passaggi:
Il client invia una richiesta di query al server e ascolta il ritorno del Socket, di solito in modalità bloccante, aspettando la risposta del server.
Il server elabora i comandi e restituisce i risultati al client.
La tecnologia del canale Redis permette al client di continuare a inviare richieste al server anche se il server non risponde, e alla fine leggere tutte le risposte del server in una volta sola.
Per visualizzare il canale Redis, è sufficiente avviare l'esempio Redis e inserire il seguente comando:
$(echo -en "PING\r\nSET 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
Negli esempi precedenti abbiamo utilizzato PING Il comando verifica se il servizio Redis è disponibile, Dopo aver impostato il valore di w3codeboxkey a redis, abbiamo recuperato il valore di w3codeboxkey e incrementato visitor di 3 volte.
Nella risposta restituita possiamo vedere che questi comandi vengono inviati una volta sola al servizio Redis e alla fine vengono lette tutte le risposte del server.
管道技术的最显著优势是提高了redis服务的性能。
在下面的测试中,我们将使用Redis的Ruby客户端,支持管道技术特性,测试管道技术对速度的提升效果。
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 }
从位于局域网中的Mac OS X系统上执行上面这个简单脚本的数据表明,开启了管道操作后,往返延时已经被改善得相当低了。
without pipelining 1.185238 seconds with pipelining 0.250783 seconds
正如你所见,开启管道后,我们的速度效率提高了5倍。