Tout d'abord, présentons brièvement l'essence de la transaction Redis :
L'essence de la transaction Redis est un ensemble de commandes. Les transactions prennent en charge l'exécution de plusieurs commandes à la fois, et toutes les commandes d'une transaction seront sérialisées. Pendant le processus d'exécution de la transaction, les commandes dans la file d'attente seront exécutées en série dans l'ordre et les demandes de commandes soumises par d'autres clients ne seront pas insérées dans la séquence de commandes d'exécution de la transaction.
Pour résumer : une transaction Redis est une exécution unique, séquentielle et exclusive d'une série de commandes dans une file d'attente.
Les transactions Redis n'ont aucune notion de niveau d'isolement :
Les opérations par lots sont placées dans le cache de file d'attente avant d'envoyer la commande EXEC et ne seront pas réellement exécutées, il n'y a donc aucune requête dans la transaction pour voir. Les mises à jour dans la transaction ne peuvent pas être vues par les requêtes en dehors de la transaction.
Redis ne garantit pas l'atomicité :
Dans Redis, une seule commande est exécutée de manière atomique, mais les transactions ne garantissent pas l'atomicité et il n'y a pas de restauration. Si une commande de la transaction ne parvient pas à s'exécuter, les commandes restantes seront quand même exécutées.
Trois étapes de la transaction Redis :
Commande de démarrage de la transaction pour mettre en file d'attente et exécuter la transaction
Commandes liées à la transaction Redis :
Regarder key1 key2 ... : Surveiller une ou plusieurs clés. Si la clé surveillée est modifiée par d'autres commandes avant l'exécution de la transaction, la transaction sera interrompue (similaire au verrouillage optimiste)
Multi : Marquer le début d'un bloc de transaction (en file d'attente)
exec : Exécuter les commandes de tous les blocs de transaction (une fois exec exécuté, les verrous de surveillance précédemment ajoutés seront annulés)
discard : Annuler la transaction et abandonner toutes les commandes du bloc de transaction
unwatch : Annuler la surveillance de toutes les clés par la surveillance
Cas d'utilisation de la transaction Redis :
(1) Exécution normale
( 2) Abandonner la transaction
(Partage vidéo d'apprentissage : tutoriel vidéo redis)
(3) S'il y a une commande dans la file d'attente des transactions erreur sexuelle (similaire à l'erreur de compilation java), lors de l'exécution de la commande EXEC, toutes les commandes ne seront pas exécutées
(4) S'il y a une erreur de syntaxe dans la file d'attente des transactions (similaire à l'exception d'exécution 1/0 de Java), lorsque la commande EXEC est exécutée, d'autres commandes correctes seront exécutées et la mauvaise commande lèvera une exception.
(5) Utiliser la montre
Cas 1 : Utilisez la montre pour détecter le solde, les données du solde ne changent pas pendant la transaction et la transaction est exécutée avec succès
Cas 2 : Utilisez la montre pour détecter le solde. Après avoir ouvert la transaction (marquée 1), effectuez l'opération marquée 2 dans une nouvelle fenêtre, modifiez la valeur du solde, et simulez d'autres clients pendant l'exécution de la transaction Modifiez les données surveillées par la montre, puis exécutez la commande marquée 1. Après l'exécution d'EXEC, la transaction n'a pas été exécutée avec succès.
Une fois EXEC exécuté pour démarrer l'exécution d'une transaction, la surveillance des variables par WARCH sera annulée, que la transaction soit exécutée avec succès ou non.
Par conséquent, lorsque l'exécution de la transaction échoue, vous devez réexécuter la commande WATCH pour surveiller les variables et démarrer une nouvelle transaction pour l'opération.
Résumé :
L'instruction de surveillance est similaire au verrouillage optimiste. Lorsque la transaction est validée, si la valeur d'une CLÉ parmi les multiples CLÉS surveillées par la montre a été modifiée par d'autres clients, utilisez EXEC pour exécuter la transaction, la file d'attente des transactions ne sera pas exécutée et une réponse Nullmulti-bulk est renvoyée pour informer l'appelant que l'exécution de la transaction a échoué.
Recommandations associées : Tutoriel sur la base de données Redis
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!