zoukankan      html  css  js  c++  java
  • 八:事务

    1.Redis 的事务(批处理)

      可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令多会序列化,,按照顺序的串行执行二不会被其他命令插入,不许加塞(相当于一次性赞这一些命令,然后一次运行,一起成功一起失败)

    2.能干嘛

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

    3.操作方式(在开启事物的时候就会记录你的操作,然后在你触发事物的时候就会一直运行你的操作)

      3.1 multi:开启事物

      3.2 exec:触发事物

      3.3 discard :取消事物

      3.4 unwatch: 取消watch命令对所有key的监视

      3.5 watch :监视一个或多个key

    4.全体连坐

      当在打开始事物时,输入命令,但是输入命令的时候发生了非常严重的错误,那么事物中所有的命令将不会被执行。

    5.冤头债主

      当在打开事物时,输入的命令没有发生错误但是运行的时候会发生错误,比如自加1在执行的时候没报错,是在运行的时候报错,那么就不会影响其他人

    6.watch监控:

       1.乐观锁(每次拿数据的时候都认为别人不会去修改,所以不会上锁,但是在放回数据的时候会对比版本号的机制,确保多个人修改时不出现问题,可以保持大并发,工作常用),悲观锁(认为自己每次去拿数据的时候别都会修改,所以在拿到数据后会把整张表锁住知道我修改完,解锁后),CAS(check and set)

       2.watch在使用的时候,可以监控一个key当这个key在该次事件中没有被unwatch(exec会有unwatch的效果)时就会一直监控这个key,当这个key在别的地方,非该次事件中的地方修改那么此次的事件里的所有内容将执行失败。

      

    事物的3阶段:

        1.开启:mulit

        2.入队:多个命令入队到事物中,接到这些命令并不会立即执行,而是放到等待执行的事物队列里面

        3.执行:有exec命令触发事物

    事物的3特性

        1.单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。没有隔离级别的概念:队列中的爺令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,

        2.也就不存在"事务内的查询要看到事务里的更新,在事务外查询不能看到"这个让人万分头痛的问题

        3.不保证原子性: redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

  • 相关阅读:
    JavaSE 基础 第51节 定义自己的异常
    JavaSE 基础 第50节 Java中的异常链
    JavaSE 基础 第49节 手动抛出异常
    JavaSE 基础 第48节 Java中的异常声明
    JavaSE 基础 第47节 获取异常信息
    JavaSE 基础 第46节 异常的分类
    JavaSE 基础 第45节Java异常快速入门
    JavaSE 基础 第44节 引用外部类的对象
    JavaSE 基础 第43节 静态内部类
    通用爬虫
  • 原文地址:https://www.cnblogs.com/BookMiki/p/14002256.html
Copyright © 2011-2022 走看看