Redis事务

Posted 呼呼睡觉睡觉啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis事务相关的知识,希望对你有一定的参考价值。

Redis事务

  Redis 事务可以一次执行多个命令,(按顺序的串行化执行,执行中不会被其它命令插入,不许加塞)

简介

  Redis事务可以一次执行多个命令(允许在一次单独的步骤中执行一组命令),并且带有以下两个重要的保证:

批量操作在发送EXEC命令前被放入队列缓存;

收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行;

在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令序列中;

1、Redis 会将一个事务中的所有命令序列化,然后按顺序执行;

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事务的主要内容,如果未能解决你的问题,请参考以下文章

Redis源代码分析(十七)--- multi事务操作

redis代码解析-事务

Redis事务入门及命令

19 事务 相关操作

19 事务 相关操作

Redis事务入门及命令