文章目录
- redis事务
- 事务简介
- 正常执行事务
- 放弃事务
- 编译时异常(代码有问题,命令有问题)
- 运行时异常(逻辑错误,错误使用命令)
事务简介
redis事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,执行过程中按照顺序执行
一次性,顺序性,排他性,执行一些列的命令。
redis单条命令是保持原子性,但是事务不保证原子性。
redis事务没有隔离级别的概念。
所有的命令在事务中,并没有被直接执行,只有发起执行命令才会被执行:exec。
redis事务执行流程
-
a.multi(开启事务)
-
b.命令入队
-
c.exec (执行事务)
discard (放弃事务)
正常执行事务
127.0.0.1:6379> multi OK 127.0.0.1:6379(TX)> set k1 v1 QUEUED 127.0.0.1:6379(TX)> set k2 v2 QUEUED 127.0.0.1:6379(TX)> get k2 QUEUED 127.0.0.1:6379(TX)> set k3 v3 QUEUED 127.0.0.1:6379(TX)> exec 1) OK 2) OK 3) "v2" 4) OK 127.0.0.1:6379>
放弃事务
127.0.0.1:6379> multi OK 127.0.0.1:6379(TX)> set k1 v1 QUEUED 127.0.0.1:6379(TX)> set k4 v4 QUEUED 127.0.0.1:6379(TX)> discard OK 127.0.0.1:6379> keys * 1) "k3" 2) "k2" 3) "k1" 127.0.0.1:6379>
编译时异常(代码有问题,命令有问题)
事务中所有命令都不会被执行。
127.0.0.1:6379> multi OK 127.0.0.1:6379(TX)> set k1 v1 QUEUED 127.0.0.1:6379(TX)> set k2 v2 QUEUED 127.0.0.1:6379(TX)> set k3 v3 QUEUED 127.0.0.1:6379(TX)> getset k3 (error) ERR wrong number of arguments for 'getset' command 127.0.0.1:6379(TX)> set k4 v4 QUEUED 127.0.0.1:6379(TX)> exec (error) EXECABORT Transaction discarded because of previous errors. 127.0.0.1:6379> get k1 (nil) 127.0.0.1:6379>
运行时异常(逻辑错误,错误使用命令)
事务中正确的部分会被执行,错误的部分则不会被执行。
127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> multi OK 127.0.0.1:6379(TX)> incr k1 QUEUED 127.0.0.1:6379(TX)> set k2 v2 QUEUED 127.0.0.1:6379(TX)> get k2 QUEUED 127.0.0.1:6379(TX)> exec 1) (error) ERR value is not an integer or out of range #虽然第一条命令报错,但是依旧正常执行 2) OK 3) "v2" 127.0.0.1:6379> get k2 "v2" 127.0.0.1:6379>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)