事务
什么是事务?
一次性
执行 多条 命令
的过程
重要概念
Redis 单条命令是原子性的【一起成功,一起失败】
事务 不是 原子性
,执行成功的成功,失败的报错。
事务的流程
一次性、顺序性、排他性
- 一次性:一次执行完
- 顺序性:按照队列顺序执行
- 排他性:不允许被干扰
开始事务 ('multi')--> 命令入队列 ('此时命令没有执行') --> 执行事务 ('exec ')【按照顺序 执行命令】
127.0.0.1:6379> multi OK 127.0.0.1:6379> set k1 v1 QUEUED 127.0.0.1:6379> set k2 v2 QUEUED 127.0.0.1:6379> get k2 QUEUED 127.0.0.1:6379> exec 1) OK 2) OK 3) "v2" 127.0.0.1:6379>
取消事务
127.0.0.1:6379> multi OK 127.0.0.1:6379> get k2 QUEUED 127.0.0.1:6379> discard OK
事务的错误处理
编译型错误
事务添加了错误命令
,在事务执行
时会 报错, 整个事务都不会被执行
127.0.0.1:6379> multi OK 127.0.0.1:6379> set kk vv QUEUED 127.0.0.1:6379> setget k5 (error) ERR unknown command `setget`, with args beginning with: `k5`, 127.0.0.1:6379> set k4 v4 QUEUED 127.0.0.1:6379> exec (error) EXECABORT Transaction discarded because of previous errors.
运行时异常
逻辑错误,语法正确
127.0.0.1:6379> multi OK 127.0.0.1:6379> set kk vv QUEUED 127.0.0.1:6379> incr k1 QUEUED 127.0.0.1:6379> set k1 v1 QUEUED 127.0.0.1:6379> get k1 QUEUED 127.0.0.1:6379> exec 1) OK 2) (error) ERR value is not an integer or out of range 3) OK 4) "v1"