目录
- 简介
- 执行过程
- 特点
- 案例
- watch
简介
事务(Transaction),个别是指要做的或所做的事件。在计算机术语中是指拜访并可能更新数据库中各种数据项的一个程序执行单元(unit)。
执行过程
开始事务 -> 命令入队 -> 执行事务。
特点
① 批量操作在发送 exec
命令前被放入队列缓存。
② 收到 exec
命令后进入事务执行,事务中任意命令执行失败,其余的命令仍然会被执行。
③ 在事务的执行过程中,其余客户端提交的命令申请不会插入到事务执行命令的序列中。
案例:
-
(1)失常执行
localhost:6379> multi OK localhost:6379> set a 1111 QUEUED localhost:6379> set b 2222 QUEUED localhost:6379> set c 3333 QUEUED localhost:6379> set d 4444 QUEUED localhost:6379> exec 1) OK 2) OK 3) OK 4) OK
-
(2)勾销事务
localhost:6379> multi OK localhost:6379> set e 55555 QUEUED localhost:6379> set f 66666 QUEUED localhost:6379> discard OK localhost:6379> exec (error) ERR EXEC without MULTI
- (3)编译型谬误
最初执行exec
命令之后,会执行队列中的命令,队列中命令有失败的,所以最初整个命令都执行失败。
编译型异样代码有问题,命令有错,事务中所有的命令都不会被执行。 -
(4)运行时谬误
localhost:6379> set a qqqq OK localhost:6379> multi OK localhost:6379> incr a QUEUED localhost:6379> set b 1111 QUEUED localhost:6379> set c 2222 QUEUED localhost:6379> set d 3333 QUEUED localhost:6379> exec 1) (error) ERR value is not an integer or out of range 2) OK 3) OK 4) OK localhost:6379> keys * 1) "a" 2) "c" 3) "b" 4) "d"
如果事务队列存在语法错误,那么执行命令的时候,其余命令是能够失常执行的,谬误命令抛出异样。
watch
Watch 命令用于监督一个(或多个) key,如果在事务执行之前这个(或这些) key 被其余命令所改变,那么事务将被打断。
-
监控
a
时,a
被批改// 客户端 1 localhost:6379> set a 1111 OK localhost:6379> WATCH a OK localhost:6379> MULTI OK localhost:6379> set a 2222 QUEUED localhost:6379> exec (nil) // 客户端 2 127.0.0.1:6379> set a 567 OK
-
失常
watch
localhost:6379> set a 1111 OK localhost:6379> WATCH a OK localhost:6379> MULTI OK localhost:6379> set b 222 QUEUED localhost:6379> set c 333 QUEUED localhost:6379> set d 444 QUEUED localhost:6379> exec 1) OK 2) OK 3) OK localhost:6379> keys * 1) "a" 2) "c" 3) "b" 4) "d"