English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Les transactions Redis peuvent exécuter plusieurs commandes à la fois et offrent les trois garanties importantes suivantes :
Les opérations en lots sont mises en file d'attente dans le cache avant l'envoi de la commande EXEC.
Après avoir reçu la commande EXEC, il entre dans l'exécution de la transaction. Si une commande de la transaction échoue, les autres commandes sont toujours exécutées.
Durant l'exécution de la transaction, les demandes de commandes soumises par d'autres clients ne sont pas insérées dans la séquence des commandes d'exécution de la transaction.
Une transaction traverse les trois étapes suivantes de la création à l'exécution :
Commencer la transaction.
Ajouter des commandes à la file.
Exécuter la transaction.
Voici un exemple de transaction, qui commence par MULTI Commencer une transaction, puis ajouter plusieurs commandes à la file de la transaction, et enfin la EXEC Les commandes déclenchent une transaction, exécutent ensemble toutes les commandes de la transaction :
redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET book-name "Mastering C"++ dans 21 jours" 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"++ dans 21 jours" 3) (entier) 3 4) 1) "Mastering Series" 2) "C"++" 3) "Programming"
L'exécution d'une commande Redis individuelle est atomique, mais Redis n'a ajouté aucune mécanique pour maintenir l'atomicité des transactions, donc l'exécution des transactions Redis n'est pas atomique.
Les opérations peuvent être comprises comme des scripts d'exécution en lots, mais les instructions en lots ne sont pas des opérations atomiques. L'échec d'une instruction intermédiaire ne entraînera pas le rollback des instructions déjà exécutées et ne causera pas non plus que les instructions suivantes ne soient pas exécutées.
这是官网上的说明 From redis docs on transactions:
It's important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.
比如:
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
如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。
下表列出了 redis 事务的相关命令:
序号 | 命令及描述 |
---|---|
1 | DISCARD 取消事务,放弃执行事务块内的所有命令。 |
2 | EXEC 执行所有事务块内的命令。 |
3 | MULTI 标记一个事务块的开始。 |
4 | UNWATCH 取消 WATCH 命令对所有 key 的监视。 |
5 | WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |