Spring事务那些事儿
(一)事务的隔离级别
- 大家都知道事务有四个属性,即ACID(原子性、一致性、隔离性、持久性)。这四个里面稍微难理解点的是一致性和持久性。所谓的一致性是指:事务执行前后数据的一致性状态,例如事务执行前用户有1万元,事务回滚后用户仍应该有1万元。而这里的持久性指的是:事务在提交后结果是永久的,即使程序崩溃数据也能恢复,当然数据库的持久性指的是高可靠性,事务执行后数据保证一定写到了磁盘及备份日志,但并不是指高可用性 ,如果你强行把机器的磁盘烧了,那数据也是无法恢复的。
- 在事务隔离性的基础上,我们对事务间的相互影响程度进行定级,即事务的隔离级别。通常事务有四种隔离级别:read uncommitted、read committed、repeatable read、serializable。
(1)read uncommitted是最低的隔离级别,其实就如其英文名一样,处于这个级别的事务可能会读到其他事务尚未提交的数据修改,即存在脏读问题。除此之外,还存在不可重复读和幻读问题问题。
(2)read committed是大部分数据库的默认隔离级别,它解决了脏读问题,但是仍存在不可重复读和幻读问题。
(3)repeatable read解决了不可重复读的问题,但是仍可能存在幻读的问题。值得一提的是mysql的默认级别是repeatable read,但它却不存在幻读问题,因为mysql通过使用next-key lock技术解决了问题,即使在repeatable read级别也能完全保证事务的隔离性要求。
(4) serializable是最为严格的隔离级别,所有事务顺序执行,实际上是通过将并行转为串行来解决事务隔离问题,无疑会降低性能。
不可重复读和幻读的区别:
不可重复读指在同一事务中多次查询同一记录(eg:select * from xx where id = 1),查询结果不一致。这主要是由于多次读期间其他事务update或delete了记录。
幻读是指在同一事务中多次进行范围查询(eg:select count(*) from xx where id > 1 and id < 100),查询结果不一致。这主要是由于多次范围查询期间其他事务insert了新数据。
(二)事务的参与者及分类
在一般的事务场景中通常有以下几个参与者:
- RM:用于管理系统数据资源,即通常意义上的数据库服务器等。
- TP monitor:主要用于分布式事务,用来协调处理多个RM的事务处理。
- TM:事务的管理者,负责事务界定、事务上下文传播等功能。
- Applacation:运行于容器中的应用程序,例如spring应用程序。
我们通常会根据RM的数量将事务分为分布式事务和局部事务(本地事务)两种。 在分布式事务中通常会存在多个不同的RM,这些RM分布在不同的系统中,相互之间通过TP monitor协调,利用两阶段提交来保障事务的ACID属性。在局部事务中一般每次数据操作只有一个RM,数据操作只需操作一个数据库,在同一个事务中不会进行多个数据库的更新。接下来我们将着重介绍局部事务的实现,毕竟分布式事务我懂的也不多
Spring事务那些事儿相关推荐
- Spring事务你可能不知道的事儿
戳蓝字"CSDN云计算"关注我们哦! 1. 使用示例 2. 标签解析 3. 实现原理 4. 小结 关于事务,简单来说,就是为了保证数据完整性而存在的一种工具,其主要有四大特性:原子 ...
- 【面试】我是如何在面试别人Spring事务时“套路”对方的
作者:李新杰,来自:编程新说 "中国最好面试官" 自从上次写了一篇"[面试]我是如何面试别人List相关知识的,深度有点长文"的文章后,有读者专门加我微信,说我 ...
- 我是如何在面试别人Spring事务时“套路”对方的
"中国最好面试官" 自从上次写了一篇"[面试]我是如何面试别人List相关知识的"的文章后,有读者专门加我微信,说我是"中国最好面试官",这 ...
- Spring事务的处理流程、传播属性、及部分释疑
目录 文章目录 一.spring事务利用AOP的拦截和处理流程 必须记住的两个要点 二.事务传播属性 三.为什么很多Exception异常必须配置在rollback-for中才有用 四.事务的传播性在 ...
- 聊聊我是如何在面试别人Spring事务时“套路”对方的
戳蓝字"CSDN云计算"关注我们哦! "中国最好面试官" 我希望把面试当作是一次交流,像朋友那样,而不是像一场Q & A.但也有人觉得,我对应聘者&qu ...
- (转)面试必备技能:JDK动态代理给Spring事务埋下的坑!
一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A ...
- spring的事务隔离_再深一点:面试工作两不误,源码级理解Spring事务
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. Spring有5种隔离级别,7种传播行为.这是面试常问的内容,也是代码中经常碰到的知识点.这些知识枯燥而且乏味,其中有些非 ...
- spring上下文是什么意思_Java程序员只会CRUD连Spring事务传播机制都不懂?
AQS到底有什么用?难道就真的只是为了面试吗? 当然不是说AQS没用,如果你不是做基础架构或者中间件开发,你很难感受到AQS的威力.当然,学习很多时候,需要的是正向反馈,学了太多造火箭的东西,面试完就 ...
- Spring事务管理的底层逻辑—源码解析
本文代码为spring 5.1.2 spring是如何控制事务的提交和回滚 加上@Transactional注解之后,Spring可以启到事务控制的功能了,再正式执行方法前它会做一些操作,我们来看看 ...
最新文章
- ArcGis10安装步骤
- Linux C: IO库函数,文件流缓冲,变参函数
- Python学习笔记(三)——条件语句、循环语句
- UVa 489 - Hangman Judge
- [秘技]解决QQ音乐超出服务区域问题
- java timetasker_Java网络与多线程系列之1:实现一个简单的对象池
- 2005年财富500强(zz)
- android中的Handler和Callback机制
- 屏幕演示讲解必备工具:虚拟教棒、屏幕画笔、ZoomIt放大屏幕、鼠标探照灯(图)
- 如何修改wifi密码(wifi密码怎么修改在手机上怎么修改)
- sip 接听后没有声音
- 数据库范式之间的转换 - 保持函数依赖分解与有/无损分解
- Git 分支管理最佳实践
- python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time datetime模块...
- 本科三本的计算机博士,读书中的我 从三本本科到985博士
- win10进行系统还原 (可以还原注册表文件 还可以清除近期卸载不了的软件)
- 嵌入式Linux热点分享网络(四)
- java的this和supper
- 关于vs编译器 /GZ 选项的意思
- 【JDY-23蓝牙模块调试】