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

Redis管道技术

Redis es una base de datos basada en el cliente-Modelo del servidor y solicitud/El protocolo de respuesta del servicio TCP. Esto significa que, en la mayoría de los casos, una solicitud seguirá los siguientes pasos:

  • El cliente envía una solicitud de consulta al servidor y escucha la devolución del Socket, generalmente en modo bloqueante, esperando la respuesta del servidor.

  • El servidor procesa las órdenes y devuelve los resultados al cliente.

Redis管道技术

La tecnología de canal Redis permite que el cliente siga enviando solicitudes al servidor incluso cuando el servidor no responde, y finalmente lea todas las respuestas del servidor de una vez.

Ejemplo en línea

Para ver el canal redis, solo hay que arrancar el ejemplo redis e ingresar el siguiente comando:

$(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

En los ejemplos anteriores, utilizamos PING para verificar si el servicio redis está disponible, después de eso, configuramos w3el valor de codeboxkey es redis, luego obtenemos w3asignar el valor a codeboxkey y hacer que visitor aumente. 3 .

En los resultados de retorno podemos ver que estas órdenes se envían al servicio redis de una vez y finalmente se leen todas las respuestas del servidor de una vez.

管道技术的优势

管道技术最显著的优势是提高了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倍。