【Redis】事务 [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:19")}}更新事务
什么是事务?
一次性
执行 多条 命令
的过程
重要概念
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"
[]()
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}