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

    1、什么是Redis的事务

      可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按照顺序串行化执行而不会被其他命名插入,不许阻塞

    2、Redis事务能干什么

      一个队列中,一次性、顺序性、排他性的执行一系列命令

    3、Redis事务用法

      1、开启事务

        multi

      2、执行事务

        exec

      3、放弃事务

        discard

      4、全体连坐(一个死,这一片全死)(过程中就异常)

        运行的时候,就出错,没有正常的入队。就都不执行

    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> set k1 v1
    QUEUED
    127.0.0.1:6379> set k2 k2
    QUEUED
    127.0.0.1:6379> set k3 v3
    QUEUED
    127.0.0.1:6379> setset k3
    (error) ERR unknown command 'setset'
    127.0.0.1:6379> set k4 v4
    QUEUED
    127.0.0.1:6379> set k5 v5
    QUEUED
    127.0.0.1:6379> exec
    (error) EXECABORT Transaction discarded because of previous errors.
    127.0.0.1:6379> get k5
    (nil)
    127.0.0.1:6379> get k2
    "v2"
    127.0.0.1:6379> set k1 a
    OK

      5、冤有头在有主(过程中没有y异常)

        运行的时候不出错,就能后面的继续运行

    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> incr k1
    QUEUED
    127.0.0.1:6379> set k1 555
    QUEUED
    127.0.0.1:6379> set k3 33
    QUEUED
    127.0.0.1:6379> set k4 v4
    QUEUED
    127.0.0.1:6379> get k4
    QUEUED
    127.0.0.1:6379> EXEC
    1) (error) ERR value is not an integer or out of range
    2) OK
    3) OK
    4) OK
    5) "v4"
    127.0.0.1:6379> get k4
    "v4"

      6、watch监控

        6.1、悲观锁/乐观所/CAS(Check And Set)

          悲观锁(表锁):我对事情的发展很悲观,这个事情肯定出事,我把整个表都给你锁了。

          乐观锁(行锁):我对事情的发展很乐观,不上锁住。为了高并发,在每个行后面加个Version,会坚持版本号,然后更新

    127.0.0.1:6379> set balance 100
    OK
    127.0.0.1:6379> set debt 0
    OK
    127.0.0.1:6379> watch balance
    OK
    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> DECRBY balance 20
    QUEUED
    127.0.0.1:6379> INCRBY debt 20
    QUEUED
    127.0.0.1:6379> EXEC
    1) (integer) 80
    2) (integer) 20

          CAS :

          unwatch : 与前面的watch连用,构成完整的事务。通过watch命令在事务执行之前监控多个keys,倘若watch之后又任何key的值发生了变化,exec命令执行的事务都将被放弃,同时返回Nullmutil-bulk应答以通知调用事务者执行事务失败

    127.0.0.1:6379> WATCH k1
    OK
    127.0.0.1:6379> set k1 500
    OK
    127.0.0.1:6379> UNWATCH
    OK
    127.0.0.1:6379> WATCH k1
    OK
    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> set k1 80
    QUEUED
    127.0.0.1:6379> exec
    1) OK
    127.0.0.1:6379> get k1
    "500"
    127.0.0.1:6379> get k1
    "80"

    4、Redis事务三阶段

      1、开启:以Multi开始一个事务

      2、入队:将多个命令入队到事务中,这些命令并不会执行,而是被放在队列中

      3、执行:有exec明林出发事务执行

    5、Redis事务特性

      1、单独的隔离操作:事务序列化,顺序执行(各自拍好队执行)

      2、没有隔离级别的概念:不是传统的DBMS,这里是NoSql

      3、不保证原子性:部分支持事务(冤有头债有主)

        

        

        

  • 相关阅读:
    LTE学习之路(3)——概述(续)
    LTE学习之路(2)——概述
    LTE学习之路(1)——移动通信技术发展历程
    读书笔记:C++ Primer系列(14)—— C++函数及参数传递
    读书笔记:C++ Primer系列(13)—— break、continue、goto语句
    读书笔记:C++ Primer系列(12)—— 类型转换
    qrcodejs二维码合成海报
    vue-core-image-upload 是一款轻量级的 Vue.js 上传插件,它可以支持的图片的上传,裁剪,压缩。它同样也支持在移动端的图片处理,它定义了诸多上传周期,你可以自由的进行流程控制。
    vue-cli按需加载,懒加载组件
    vue-cli 部分浏览器不支持es6的语法-babel-polyfill的引用和使用
  • 原文地址:https://www.cnblogs.com/karrya/p/11279171.html
Copyright © 2011-2022 走看看