redis学习-事务

事务

Redis事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务的执行过程中,会按照顺序执行
一次性,顺序性,排他性,执行一系列的命令
redis事务没有隔离级别的概念
所有的命令在事务中,并没有被直接执行,只有发起执行命令的时候才会执行!exec
redis单条命令是保证原子性的,但是事务不保证原子性
redis的事务*
* 开启事务(MULTI)
* 命令入队(....)
* 执行事务(exc)

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 k3
QUEUED
127.0.0.1:6379(TX)> exec      #执行事务
1) OK
2) OK
3) "v2"
4) OK

放弃事务(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 k4 v4
QUEUED
127.0.0.1:6379(TX)> DISCARD
OK
127.0.0.1:6379> get k4
(nil)

异常

编译型异常(代码有问题,命令有错),事务所有命令都不会被执行
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k5 v5
QUEUED
127.0.0.1:6379(TX)> getset k1
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
运行时异常,如果事务队列中存在语法性,那么执行时,其它命令正常执行,错误命令抛出
127.0.0.1:6379> set k1 "asd"
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"
上一篇:etcd学习(9)-etcd中的存储实现


下一篇:AV1基于机器学习的变换块快速划分