版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢! 本文网址:https://blog.csdn.net/sun8112133/article/details/102835769
Redis事务 可以一次执行多个命令,并且带有以下两个重要的保证: 1)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 2)事务是一个原子操作: 事务中的命令要么全部被执行,要么全部都不执行。 一个事务从开始到执行会经历以下三个阶段: 1)开始事务 2)命令入队 3)执行事务
开始事务,开始一个事务,总是返回OK。
命令: MULTI
提交事务,执行所有事务块内的命令,事务块内所有命令的返回值,按命令执行的先后顺序排列。当操作被打断时,返回空值 nil 。
命令: EXEC
回滚事务,用于取消事务,放弃执行事务内的所有命令,它总是返回 OK。
命令: DISCARD
Watch命令 用于监视一个(或多个) key ,如果在事务提交之前这个(或这些) key 被其他命令所改动,那么事务将全被打断, 总是返回 OK。
命令: WATCH key1 [key2] ...
用于取消 WATCH 命令对所有 key 的监视,它总是返回 OK。
命令: UNWATCH
首先完成这个案例,我们需要开启两个客户端
第一个客户端: redis 127.0.0.1:6379> watch name 监视 name OK redis 127.0.0.1:6379> multi # 开启一个事务 OK redis 127.0.0.1:6379> set age 20 QUEUED redis 127.0.0.1:6379> get age QUEUED # 执行到这里的时候,第二个客户端开始执行了,导致了事务被打断 # 因为 name 被监视了,导致事务中所有的命令不生效 redis 127.0.0.1:6379> exec # 提交事务 (nil) redis 127.0.0.1:6379> keys * 1) "stu" 2) "salary" 3) "name" 第二个客户端: redis 127.0.0.1:6379> set name "lisi" OK 博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!