Redis学习笔记十一(Redis事务)

mac2024-04-09  30

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢! 本文网址:https://blog.csdn.net/sun8112133/article/details/102835769

文章目录

一、事务常用命令1、MULTI2、EXEC3、DISCARD4、WATCH5、UNWATCH 二、事务示例1、事务演示2、WATCH命令 与 UNWATCH 命令演示

Redis事务 可以一次执行多个命令,并且带有以下两个重要的保证:   1)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。   2)事务是一个原子操作: 事务中的命令要么全部被执行,要么全部都不执行。   一个事务从开始到执行会经历以下三个阶段: ​   1)开始事务   2)命令入队   3)执行事务


一、事务常用命令

1、MULTI

开始事务,开始一个事务,总是返回OK。

命令: MULTI

2、EXEC

提交事务,执行所有事务块内的命令,事务块内所有命令的返回值,按命令执行的先后顺序排列。当操作被打断时,返回空值 nil 。

命令: EXEC

3、DISCARD

回滚事务,用于取消事务,放弃执行事务内的所有命令,它总是返回 OK。

命令: DISCARD

4、WATCH

Watch命令 用于监视一个(或多个) key ,如果在事务提交之前这个(或这些) key 被其他命令所改动,那么事务将全被打断, 总是返回 OK。

命令: WATCH key1 [key2] ...

5、UNWATCH

用于取消 WATCH 命令对所有 key 的监视,它总是返回 OK。

命令: UNWATCH


二、事务示例

1、事务演示

redis 127.0.0.1:6379> multi # 开启一个事务 OK redis 127.0.0.1:6379> set name "hello" QUEUED redis 127.0.0.1:6379> get name QUEUED redis 127.0.0.1:6379> sadd stu "stu1" "stu2" QUEUED redis 127.0.0.1:6379> exec # 提交事务,事务中的命令全部执行了 1) OK 2) "hello" 3) (integer) 2 redis 127.0.0.1:6379> keys * 1) "stu" 2) "name" 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 redis 127.0.0.1:6379> discard # 回滚事务 OK redis 127.0.0.1:6379> keys * # 事务中的命令不生效 1) "stu" 2) "name"

2、WATCH命令 与 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 博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!
最新回复(0)