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同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

  • 相关阅读:
    hibernate -- 分页模糊查询中setParameter 和setParameterList
    HTTP协议状态码详解(HTTP Status Code)
    远程桌面全屏显示
    将中文标点符号替换成英文标点符号
    MySQL 三种关联查询的方式: ON vs USING vs 传统风格
    java如何遍历map的所有的元素(各种方法)
    JS处理Cookie
    js追加子元素
    JAVA编程思想(2)
    1047. Student List for Course (25)
  • 原文地址:https://www.cnblogs.com/BookMiki/p/14002256.html
Copyright © 2011-2022 走看看