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

Redis管道技术

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.

Redis管道技术

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.

Esempio online

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倍。