码迷,mamicode.com
首页 > 其他好文 > 详细

Redis事务

时间:2020-07-08 23:18:34      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:开始   key   multi   style   发送   运行   pre   car   col   

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事务

标签:开始   key   multi   style   发送   运行   pre   car   col   

原文地址:https://www.cnblogs.com/lililixuefei/p/13204898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!