getbookNameQUEUED>saddtag"Redis""NewBook"QUEUED>smemberstagQUEUED>e"/> getbookNameQUEUED>saddtag"Redis""NewBook"QUEUED>smemberstagQUEUED>e">
Maison > Article > base de données > Analyse des instances de transaction Redis
Redis implémente des fonctions de transaction via multi, exec, rejet et watch.
multi : démarrer la transaction
exec : valider la transaction et exécuter
discard : Annuler la transaction
watch : Surveiller n'importe quel nombre de clés avant le début de la transaction
> multi OK > set bookName "Redis" QUEUED > get bookName QUEUED > sadd tag "Redis" "New Book" QUEUED > smembers tag QUEUED > exec 1) OK 2) "Redis" 3) (integer) 2 4) 1) "Redis" 2) "New Book"Start transaction
> multi OK
# 🎜🎜# Command enqueue
> set bookName "Redis" QUEUED > get bookName QUEUED > sadd tag "Redis" "New Book" QUEUED > smembers tag QUEUED
Execute transactions
> exec 1) OK 2) "Redis" 3) (integer) 2 4) 1) "Redis" 2) "New Book"
discard command
> multi OK > set author "lisi" QUEUED > discard OK > get author (nil)
watch command
# Redis 客户端1 > watch letter OK > multi OK > set letter a QUEUED > exec (nil) # Redis 客户端2 > set letter b OK # Redis 客户端1 > get letter "b"
watch La commande surveille n'importe quel nombre de clés avant le début de la transaction : lors de l'appel de la commande Excel pour exécuter une transaction, si l'une des clés surveillées a été modifiée par d'autres clients, la transaction entière ne sera plus exécuté.Renvoyer l'échec directement.
Exception de transaction
> set letter ac QUEUED > get letter ac (error) ERR wrong number of arguments for 'get' command > exec (error) EXECABORT Transaction discarded because of previous errors.
Exception d'exécution
> multi OK > lpush books "Redis" QUEUED > incr books QUEUED > lpush books "Python" QUEUED > lrange books 0 -1 QUEUED > exec 1) (integer) 1 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 3) (integer) 2 4) 1) "Python" 2) "Redis"
ACID of transactions
Cohérence
Si l'erreur de commande se produit, la transaction ne peut pas être exécutée. S'il s'agit d'une exception d'exécution, Redis inclura l'erreur. erreur dans le résultat du retour, n'affecte pas l'exécution ultérieure, la transaction est donc cohérente.
Le processus Redis a été terminé
En mode mémoire pure, Redis n'effectue pas de persistance Après le redémarrage, la base de données est vide, elle est donc cohérente sur le plan transactionnel.
En mode RDB, la transaction n'effectuera pas le travail de sauvegarde du fichier RDB au milieu. Le travail RDB ne pourra démarrer qu'une fois la transaction terminée. Par conséquent, le processus Redis est interrompu lors de l'exécution de la transaction et, quel que soit son succès, il ne sera pas enregistré dans le fichier RDB, il est donc cohérent.
En mode AOF, une partie de l'instruction de transaction est écrite dans le fichier AOF et enregistrée avec succès. Les transactions incomplètes sont enregistrées dans le fichier AOF. Lors du redémarrage de Redis, vérifiez que le fichier AOF est incomplet et Redis. sort avec une erreur. Cette transaction incomplète doit être supprimée avant que le redémarrage puisse réussir, elle est donc cohérente.
En mode AOF, les transactions ne sont pas écrites dans le fichier AOF, donc après le redémarrage de la base de données Redis, les dernières données sont enregistrées avec succès dans le fichier AOF. Il n'y a pas de données pour cette transaction, elle est donc cohérente.
Isolation
persistence
En mode RDB, le serveur peut échouer pendant la période suivant l'exécution de la transaction et avant la mise à jour du fichier RDB, les transactions en mode RDB ne sont donc pas durables.
En mode AOF, ajoutez des commandes au fichier AOF, mais l'écriture du fichier ne sera pas écrite immédiatement sur le disque, mais sera d'abord stockée dans le tampon. Il y a donc un très petit intervalle entre les données enregistrées sur le disque. Les transactions dans ce mode ne sont pas non plus durables.
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!