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