zoukankan      html  css  js  c++  java
  • Redis事务

    1、简介

        Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

    • 批量操作在发送 EXEC 命令前被放入队列缓存。
    • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
    • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

    一个事务从开始到执行会经历以下三个阶段:

    • 开始事务。
    • 命令入队。
    • 执行事务。

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

    2、执行中不会被其他命令插入,不允许出现加塞行为

    2、命令

    下表列出了 redis 事务的相关命令:

    序号

    命令及描述

    1

    DISCARD 
    取消事务,放弃执行事务块内的所有命令。

    2

    EXEC 
    执行所有事务块内的命令。

    3

    MULTI 
    标记一个事务块的开始。

    4

    UNWATCH 
    取消 WATCH 命令对所有 key 的监视。

    5

    WATCH key [key ...] 
    监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

    3、示例

    3.1. 示例1MULTI EXEC

    功能需求:AB账号转账50元,原始A账号余额是80元,B账户余额是10元。

    一个事务的例子,它先以MULTI开始一个事务,然后将多个命令入队到事务中,最后由EXEC命令触发事务。

     

     

    3.2. 示例2DISCARD放弃队列执行

         通过discard命令进行rollback的操作,就是回滚事务。

         

    3.3. 示例3:事务的错误处理

       事务的错误处理:

          如果某个命令爆出来错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。

     

    我们发现,incy hello 命令会出错,因为他将字符串-1操作。

    但是这个命令也是在事务里面(事务队列里面),虽然他执行失败了,但是没影响别的命令的执行。

    3.4. 示例4:事务的错误处理

       事务的错误处理:

       队列中的某个命令出现了报告错误,执行时整个的所有队列都会被取消。

     

    由于之前的错误,导致事务回滚。

    即运行时异常和编译错误时。

    3.5. 示例5:事务的WATCH

    WATCH key [key ...] 
    监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断,回滚。

    需求:某一账户在一事务中进行操作,在提交事务前,另一个进程对该账户进行操作。

     

    (客户端1进行账户减10的操作,在事务中,注意是在watch监视中

     

    (客户端2在客户端1未执行事务的时候,就减去了账户的100


    (客户端1此时执行exec,发现事务没有执行成功,回滚了。。

    3.6. 示例6:事务的UNWATCH

    UNWATCH 
    取消 WATCH 命令对所有 key 的监视。

    这个命令用的少,因为在执行WATCH命令后,执行exec和discard命令后会自动执行unwatch,不需要自己主动执行unwatch

    4、应用场景

      一组命令必须同时都执行,或者都不执行。

      我们想保证一组命令在执行过程之中不被其他命令插入。

      商品秒杀(活动)。

  • 相关阅读:
    页面刷新后,页面重新棍回到原来的位置;如何在回发后返回客户端时仍然保持滚动条原来的位置
    asp.net查询数据库时提示使用的sql server版本不支持数据类型date
    GridView导出Excel研究
    asp.net GridView 时间格式化 设置 短日期格式 去掉0!
    存储过车如果没有参数,不要加后面的括号,否则报错
    只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called during Render(); )
    OpenCV下的图片缩放(相关版本: OpenCV 2.1)
    Oracle Spatial 翻译第一漳
    矩阵基本运算的实现(standard C++Version)
    Oracle Spatial 翻译部分的原文
  • 原文地址:https://www.cnblogs.com/schangxiang/p/11351354.html
Copyright © 2011-2022 走看看