Lorsque nous utilisons une transaction dans Redis, elle achemine essentiellement toutes les commandes de la transaction. Et lorsque EXEC est lancé, toutes les commandes sont exécutées ensemble, conservant ainsi toujours l'atomicité de plusieurs commandes.
N'est-ce pas la même chose que le pipelining?
En quoi le pipelining et la transaction sont-ils différents? Aussi, pourquoi la nature à fil unique de Redis ne suffit-elle pas? Pourquoi avons-nous explicitement besoin de pipelining/transaction?
Le pipelining est avant tout une optimisation de réseau. Cela signifie essentiellement que le client met en mémoire tampon un tas de commandes et les envoie au serveur en une seule fois. Les commandes ne sont pas garanties d'être exécutées dans une transaction. L'avantage ici est d'économiser le temps d'aller-retour du réseau pour chaque commande.
Redis est un thread unique donc une commande individuelle est toujours atomique, mais deux commandes données de clients différents peuvent s'exécuter en séquence, en alternant entre elles par exemple.
Multi/exec, cependant, garantit qu'aucun autre client n'exécute de commandes entre les commandes de la séquence multi/exec.