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

管道技术Redis

Redis est une base client-Le modèle du serveur et la requête/Le protocole de réponse du service TCP. Cela signifie que dans la plupart des cas, une requête suit les étapes suivantes :

  • Le client envoie une requête de consultation au serveur et écoute le retour Socket, généralement en mode bloquant, en attendant la réponse du serveur.

  • Le serveur traite les commandes et renvoie les résultats au client.

管道技术Redis

La technologie de canalisation Redis permet au client de continuer à envoyer des requêtes au serveur même si le serveur ne répond pas, et de lire finalement toutes les réponses des serveurs en une seule fois.

Exemple en ligne

Pour vérifier la canalisation Redis, il suffit de démarrer l'exemple Redis et d'entrer la commande suivante :

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

Dans les exemples ci-dessus, nous avons utilisé PING la commande pour vérifier si le service Redis est disponible, ensuite nous avons configuré w3la valeur de codeboxkey est redis, puis nous obtenons w3la valeur de codeboxkey et fait augmenter visitor. 3 deuxièmement.

Dans les résultats retournés, nous pouvons voir que ces commandes soumettent une fois pour toutes aux services Redis et lisent finalement toutes les réponses des serveurs en une seule fois.

管道技术的优势

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