【Redis】事务

事务

什么是事务?

一次性 执行 多条 命令的过程

重要概念

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>

mark

取消事务

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.

mark

运行时异常

逻辑错误,语法正确

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"

mark

发表评论 / Comment

用心评论~