Redis est un service TCP basé sur le modèle client-serveur et le protocole de requête/réponse. Cela signifie que généralement une requête suivra les étapes suivantes :

  • Le client envoie une requête de requête au serveur et écoute le retour du Socket, généralement en mode blocage, en attendant que le serveur répondre. .

  • Le serveur traite la commande et renvoie le résultat au client.


Redis Pipeline Technology

Redis Pipeline Technology peut permettre au client de continuer à envoyer des requêtes au serveur lorsque celui-ci ne répond pas, et enfin de tout lire Obtenez immédiatement les réponses de tous les serveurs.

Instance

Pour afficher le pipeline redis, il vous suffit de démarrer l'instance redis et de saisir la commande suivante :

$(echo -en "PING\r\n SET w3ckey redis\r\nGET w3ckey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379

+PONG
+OK
redis
:1
:2
:3

Dans l'exemple ci-dessus, nous utilisons le <🎜 Commande >PING pour voir redis si le service est disponible, Après cela, nous définissons la valeur de w3ckey sur redis, puis nous obtenons la valeur de w3ckey et faisons incrémenter le visiteur 3 fois.

Dans les résultats renvoyés, nous pouvons voir que ces commandes sont soumises au service Redis en même temps, et enfin lire toutes les réponses du serveur en même temps


Avantages de la technologie pipeline

L'avantage le plus important de la technologie pipeline est d'améliorer les performances des services Redis.

Quelques données de test

Dans le test suivant, nous utiliserons le client Ruby de Redis pour prendre en charge les fonctionnalités de la technologie de pipeline afin de tester l'effet d'amélioration de la vitesse de la technologie de pipeline.

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 
}

Les données de l'exécution du script simple ci-dessus sur un Mac OS

without pipelining 1.185238 seconds 
with pipelining 0.250783 seconds

Comme vous pouvez le constater, après l'ouverture du pipeline, notre efficacité en termes de vitesse a augmenté de 5 fois.