Transactions Redis

Les transactions Redis peuvent exécuter plusieurs commandes à la fois, et offrent les trois garanties importantes suivantes :

  • Les opérations par lots sont placées dans un cache de file d'attente avant l'envoi de la commande EXEC.
  • Après réception de la commande EXEC, la transaction entre en exécution. Si une commande de la transaction échoue, les commandes restantes sont quand même exécutées.
  • Pendant l'exécution d'une transaction, les demandes de commandes soumises par d'autres clients ne seront pas insérées dans la séquence de commandes exécutées dans la transaction.

Une transaction passe par les trois étapes suivantes, du début à l'exécution :

  • Commencer la transaction.
  • Mise en file d'attente des commandes.
  • Exécuter la transaction.

Exemple

Voici un exemple de transaction. Il utilise d'abordMULTIpour démarrer une transaction, puis met en file d'attente plusieurs commandes dans la transaction, et enfin utilise la commandeEXECpour déclencher la transaction, exécutant toutes les commandes de la transaction ensemble :

redis 127.0.0.1:6379> MULTI
OK

redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED

redis 127.0.0.1:6379> GET book-name
QUEUED

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED

redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

L'exécution d'une seule commande Redis est atomique, mais Redis n'ajoute aucun mécanisme pour maintenir l'atomicité des transactions, donc l'exécution des transactions Redis n'est pas atomique.

Une transaction peut être comprise comme un script d'exécution par lots empaqueté, mais les commandes par lots ne sont pas des opérations atomiques. Si une commande au milieu échoue, cela n'entraînera pas l'annulation des commandes déjà exécutées, ni n'empêchera les commandes suivantes d'être exécutées.

Ceci est l'explication sur le site officiel. D'après la documentation Redis surles transactions:

Il est important de noter que même lorsqu'une commande échoue, toutes les autres commandes de la file d'attente sont traitées – Redis n'arrêtera pas le traitement des commandes.

Par exemple :

redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

Si une erreur se produit à set b bbb, set a a déjà réussi et ne sera pas annulé, et set c continuera à s'exécuter.


Commandes de transaction Redis

Le tableau suivant répertorie les commandes liées aux transactions Redis :

Non.Commande et description
1DISCARD
Annule la transaction et abandonne toutes les commandes du bloc de transaction.
2EXEC
Exécute toutes les commandes du bloc de transaction.
3MULTI
Marque le début d'un bloc de transaction.
4UNWATCH
Annule la surveillance de toutes les clés par la commande WATCH.
5WATCH clé [clé ...]
Surveille une (ou plusieurs) clés. Si ces clés sont modifiées par d'autres commandes avant l'exécution de la transaction, la transaction sera interrompue.
Autres extensions