标签:过程 商品 就是 放弃 mic 阶段 lin action bsp
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
一个事务从开始到执行会经历以下三个阶段:
1、Redis会将一个事务中的所有命令序列化,然后按顺序执行
2、执行中不会被其他命令插入,不允许出现加塞行为
下表列出了 redis 事务的相关命令:
序号 |
命令及描述 |
1 |
DISCARD |
2 |
EXEC |
3 |
MULTI |
4 |
UNWATCH |
5 |
WATCH key [key ...] |
功能需求:A向B账号转账50元,原始A账号余额是80元,B账户余额是10元。
一个事务的例子,它先以MULTI开始一个事务,然后将多个命令入队到事务中,最后由EXEC命令触发事务。
通过discard命令进行rollback的操作,就是回滚事务。
事务的错误处理:
如果某个命令爆出来错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。
我们发现,incy hello 命令会出错,因为他将字符串-1操作。
但是这个命令也是在事务里面(事务队列里面),虽然他执行失败了,但是没影响别的命令的执行。
事务的错误处理:
队列中的某个命令出现了报告错误,执行时整个的所有队列都会被取消。
由于之前的错误,导致事务回滚。
即运行时异常和编译错误时。
WATCH key [key ...]
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断,回滚。
需求:某一账户在一事务中进行操作,在提交事务前,另一个进程对该账户进行操作。
(客户端1进行账户减10的操作,在事务中,注意是在watch监视中)
(客户端2在客户端1未执行事务的时候,就减去了账户的100元)
(客户端1此时执行exec,发现事务没有执行成功,回滚了。。)
UNWATCH
取消 WATCH 命令对所有 key 的监视。
这个命令用的少,因为在执行WATCH命令后,执行exec和discard命令后会自动执行unwatch,不需要自己主动执行unwatch
一组命令必须同时都执行,或者都不执行。
我们想保证一组命令在执行过程之中不被其他命令插入。
商品秒杀(活动)。
标签:过程 商品 就是 放弃 mic 阶段 lin action bsp
原文地址:https://www.cnblogs.com/schangxiang/p/11351354.html