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


    事务

    可一次执行多个命令,本质上上一组命令的集合。一个事务的所有命令都会被序列化,按照顺序串行化执行,在执行期间不允许其他命令加塞进来 ;


    常用命令

    1. Discard 取消事务,放弃执行事务块内的所有命令
    2. Exec 执行所有事务块内的命令
    3. Multi 标记一个事务块的开始
    4. Unwatch 取消 watch 命令对所有 key 的监视
    5. watch key [key2 key3 ... keyN] 监视一个或多个 key ,如果在事务执行之前,被监视的 key 被其他命令所改动,则事务将会被打断 ;

    正常执行

    使用 multi 命令开启事务,然后所有的操作,都会被放到一个 queen 里面,待收到 EXEC 命令,就会将 queen 里面的命令按顺序执行;

    开启事务,可以一次执行一堆命令 ;


    放弃事务

    在往事务块里面添加命令的时候 ,使用 discard 可以清空事务块的所有命令,也就是放弃本次事务 ;


    全体连做

    在往事务添加命令的时候,如果有一个 错误的命令 ,添加到了事务块里面,Redis 会立马抛出一个错误,在执行 exec 命令的时候,会失败,事务不会得到执行 ;


    冤有头债有主

    如果在往事务里面添加命令的时候,虽然你的操作可能会报错,但是你的命令是正确的redis 是不会知道你执行以后到底错误与否的,所有不会报错;

    在执行 exec 的时候,其他命令会得到执行,但是执行出错的命令,会抛出一个错误 ;


    redis 到底支不支持事务

    支持是肯定支持的,但是不是向 mysql 的事务那样强烈,有一条命令操作引起异常,则全部回滚掉 ;

    redis 是部分支持,如果你给我一个错误的命令,那么我全部不执行,如果你给我一个正确的命令,我就执行,但是命令执行以后的错误,不关我事了 ;

    所以, redis 是不支持原子性的,也就是不会进行回滚 ;


    Watch 监控

    • 悲观锁

      顾名思义,就是很悲观,每次取拿数据的时候,都认为别人会改动数据,所以每次在拿数据的时候,都会上锁,这样其他线程想要拿数据,就只能等;

      传统的关系型数据库里面的行锁、表锁、读锁、写锁,都是这种锁机制 ,在操作之前先上锁;

      影响高并发 ;

    • 乐观锁

      顾名思义,就是很乐观,每次去拿数据的时候,都认为别人不会修改,所以不会上锁,但是在更新的时候,会判断一下再此期间别人有没有更新该条记录,可以使用版本号机制进行判断。

      乐观锁适用于多读的应用类型 ,提高吞吐量;

    • CAS(check and set)

    watch 类似于 乐观锁 的存在,对 Key 进行 Watch 以后,再开启事务 multi ,在执行 exec 之,在事务期间之外,如果发现监视的 key被修改过,不论是谁改动,事务都将执行失败 ;

    一旦执行 exec ,无论事务成功执行与否,对 key 的监视,都将被取消掉 ;

  • 相关阅读:
    lr11_Analysis_Options选项介绍:
    lr11_Controller_Options选项介绍:
    ArcGIS Python 文件扩展名过滤器设置
    arcgis python xlstoshp
    arcgis python 标注
    ArcGIS Python 唯一值专题
    arcpy 获得是否为布局mxd.activeView
    python 度分秒转度
    我的新书,ArcGIS从0到1,京东接受预定,有160个视频,851分钟
    python 数字转字符保留几位小数 by gisoracle
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665617.html
Copyright © 2011-2022 走看看