Redis事务
Posted 呼呼睡觉睡觉啦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis事务相关的知识,希望对你有一定的参考价值。
Redis 事务可以一次执行多个命令,(按顺序的串行化执行,执行中不会被其它命令插入,不许加塞)
简介
Redis事务可以一次执行多个命令(允许在一次单独的步骤中执行一组命令),并且带有以下两个重要的保证:
批量操作在发送EXEC命令前被放入队列缓存;
收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行;
在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令序列中;
2、执行中不会被其他命令插入,不许出现加塞行为;
常用命令
DISCARD:取消事务,放弃执行事务块内的所有命令;
EXEC:执行所有事务块内的命令;
MULTI:标记一个事务块的开始;
UNWATCH:取消 WATCH 命令对所有key的监视;
WATCH key [key ...]:监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断;
一个事务从开始到执行会经历一下三个阶段:
1、开始事务
2、命令入队
3、执行事务
示例1 MULTI EXEC
转账功能,A向B账号转账50元
一个事务的例子,它先以MULTI开始一个事务,然后将多个命令入队到事务中,最后由EXEC命令出发事务
1、输入Multi 命令开始,输入的命令都会依次进入命令队列中,但不会执行;
2、直到输入 Exec 后,Redis 会将之前的命令队列中的命令依次执行;
示例2 DISCARD放弃队列运行
1、输入Multi 命令开始,输入的命令斗殴会依次进入命令队列中,但不会执行;
2、直到输入 Exec 后,Redis 会将之前的命令队列中的命令依次执行;
2、命令队列的过程中可以通过 discard 来放弃队列运行;
示例3 事务的错误处理
事务的错误处理:如果执行的某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚;
示例4 事务的错误处理
事务的错误处理:队列中的某个命令出现了报告错误,执行时整个的所有队列都会被取消;
示例5 事务的WATCH
WATCH key [key ...]
:监视一个(或多个)key,如果在事务执行之前这个(或这些)key 被其他命令所改动,那么事务将被打断;
需求:某一个账户在一事务内进行操作,在提交事务前,另一个事务对该长湖进行操作;
应用场景
一组命令必须同时都执行,或者都不执行;
我们想要保证一组命令在执行的过程中不被其他命令插入;
案例
秒杀;
以上是关于Redis事务的主要内容,如果未能解决你的问题,请参考以下文章