• springboot之事务


    1单机事务   

    A-->B  用户表、账户表、订单表都在一个mysql中

    A转账给B,那么正常情况下A账户减钱,B账户加钱,如果A减钱成功,B账户加钱失败,那么A账户也要减少钱失败

    2分布式事务

    分布式事务处理通过二次提交,需要保证数据的一致行

    3事务的隔离机制

    Serializable: 串行处理,消耗资源,最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用

    例如:A转给B100万,发现转错了,A不能找B要回这100W,只能等着B获取100W后再去协商

    Read uncommitted(读未提交):一个事务可以提取读取另外一个未提交的事务的数据

    例如:A要转给B100万,发现转错了,B还没有获取到这100W,A可以要求将这笔钱转回去

    Read committed (读提交):  一个事务要等另一个事务读取之后才能提交事务

    例如:A要转给B100万,B看见A的卡里有100万,很高兴,但是C急用钱,将A的100万转走了,那么A无法转给B  100W

    若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。但在这个事例中,出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读。

    Repeatable read(重复读):开始读取数据(事务开启)时,不再允许修改操作

    例如:A要转给B100万,B看见A的卡里有100万,很高兴,C急用钱,想要将A的100万转走,但是不行,因为钱已经先要转给B了

    重复读可以解决不可重复读问题,但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作

    幻听:A转给B100万,B看见账户就是100W,这个时候,A又给B转了20万,那么B去查,发现账户是120W,这就是幻听,可以通过序列化解决

     

     

  • 相关阅读:
    redis cluster 6.2集群
    RocketMQ多master多salve集群搭建
    等保审核 --- MySQL密码复杂度--和连接错误超时等
    centos7.5升级系统内核版本
    MHA架构的实现方式
    使用pip的方式安装docker-compose
    MySQL备份每一个数据库为单独的sql压缩文件,并且保留最近一个月的备份文件
    SpringCloud组件编写Dockerfile文件模板
    火狐浏览器经常使用的插件
    docker 查询或获取私有仓库(registry)中的镜像
  • 原文地址:https://www.cnblogs.com/zhushilai/p/13597584.html
Copyright © 2020-2023  润新知