redis事务操作MULTI 、 EXEC 、 DISCARD 和 WATCH

官方介绍MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令,事务可以一次执行多个命令,但是必须满足2个条件:


事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。执行和是否成功是2个概念,并不是一个失败报错等,其他就失败。redis对事务是部分支持。如果最开始语法等就有提交错误,就相当于java的编译器都过不了,那么肯定全部不执行(见图一)。如果在执行过程中报错,已经全部执行了,但是谁报错找谁,其他正常执行放行(图二)。各取所需!这里的事务并不是要么全部成功,要么全部失败,全部执行和全部成功(或者都失败)是2个概念。

MULTI 开启事务,总是返回OK,EXEC 提交事务,DISCARD放弃事务(放弃提交执行),WATCH监控
QUEUED是将命令加入执行的队列
图一:


图二:

K1的value不是数字,执行时候报错,其他不影响,都执行了命令

DISCARD取消事务:
127.0.0.1:6379> set k1 k1
OK
127.0.0.1:6379> set k2 k2
OK
127.0.0.1:6379> set k3 k3
OK
127.0.0.1:6379> set k4 k4
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 11
QUEUED
127.0.0.1:6379> set k2 22
QUEUED
127.0.0.1:6379> set k3 33
QUEUED
127.0.0.1:6379> set k4 44
QUEUED
127.0.0.1:6379> DISCARD
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k3"
3) "k1"
4) "k4"
127.0.0.1:6379> get k1
"k1"
127.0.0.1:6379> get k2
"k2"
127.0.0.1:6379> get k3
"k3"
127.0.0.1:6379> get k4
"k4"
127.0.0.1:6379> 


WATCH监控:比如信用卡有100的额度,刷了20后,就欠额20,额度还有80,就需要这2次操作都在一个事 务中,要么2个都成功,要么2个操作都失败。


成功,保证都在一个事务中
如果中间被其他人改动了怎么办呢?

中途被其他人修改了,自己的事务失败了,这个时候就需要使用UNWATCH,放弃本次监控,重新来过(重新获值再去修 改),乐观锁


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值