当前位置: 首页 > news >正文

【实战场景】@Transactional中使用for update的注意点

【实战场景】@Transactional中使用for update的注意点

  • 开篇词:
  • 干货篇:
      • 知识回顾
      • 注意点
        • 1.锁的范围和粒度:
        • 2.事务的隔离级别:
        • 3.死锁:
        • 4.性能影响:
        • 5.事务的边界:
        • 6.异常处理:
        • 7. 数据库和存储引擎的支持:
        • 8. 测试和验证:
  • 总结篇:
  • 我是杰叔叔,一名沪漂的码农,下期再会!

开篇词:

这次接到一个任务要去实现点赞和取消点赞的功能,看似简单的一个需求,里面要考虑的点还是不少,本次采用的方案是spring的@transactional配合mysql的悲观锁for update去实现

(PS:当然可以去用redis去做,但得考虑后续的数据双向同步问题和顶着快速上线的压力还是选择了悲观锁方案,改动小呀 @_@)

干货篇:

知识回顾

  • @Transactional 是 Spring 框架中的一个非常重要的注解,它用于声明一个方法或类需要被事务管理。当你使用 @Transactional 注解时,Spring 容器会为这个方法或类创建一个代理(proxy),并在调用时应用相应的事务管理逻辑。这意呀着,你可以通过简单的注解来管理事务的边界,包括事务的开始、提交或回滚等,而无需手动编写大量的代码来控制事务。
  • 在MySQL中,FOR UPDATE是一个在SELECT语句中使用的选项,它主要用于在事务处理(Transaction Processing)环境中锁定选中的行,以便进行后续的更新操作。当你在一个事务中执行一个带有FOR UPDATE的SELECT语句时,MySQL会锁定这些行,直到当前事务结束(通过COMMIT或ROLLBACK语句)。这样做的目的是为了防止其他事务修改这些行,从而保持数据的一致性和完整性。

注意点

在Spring框架中使用@Transactional注解时,结合SQL查询中的FOR UPDATE子句,需要注意以下几个方面以确保事务的正确性和性能:

1.锁的范围和粒度:
  • FOR UPDATE会锁定查询到的行,直到当前事务结束。因此,要仔细考虑查询的范围,避免不必要地锁定大量行,这可能会影响到并发性能。
  • 确保你的查询是精确的,只锁定需要修改的行。
2.事务的隔离级别:
  • 不同的隔离级别会影响锁的行为和可见性。例如,在READ COMMITTED隔离级别下,锁通常只在需要时持有,而在SERIALIZABLE隔离级别下,可能会锁定更多的数据以防止幻读。
  • 检查并设置适合你的业务场景的事务隔离级别。
3.死锁:
  • 当多个事务相互等待对方释放锁定的资源时,可能会发生死锁。在使用FOR UPDATE时,尤其要注意避免死锁的发生。
  • 设计事务时,尽量保持事务简短,避免在事务中执行复杂的逻辑或等待用户输入。
  • 如果检测到死锁,MySQL会自动检测并中断其中一个事务以解锁。但是,你应该准备好处理事务回滚的情况,并确保应用能够正确地从失败中恢复。
4.性能影响:
  • 锁定行会增加数据库操作的开销,包括锁的获取、保持和释放。
  • 监控数据库的性能指标,如锁等待时间、锁冲突等,以确保事务处理不会成为性能瓶颈。
5.事务的边界:
  • 确保@Transactional注解正确应用在你的服务层方法上,并且这些方法包含了需要事务支持的数据库操作。
  • 注意不要在同一个事务中调用其他服务层的方法,除非这些方法也标记为@Transactional(这可能会导致不必要的嵌套事务或事务传播问题)。
6.异常处理:
  • 在事务方法中正确处理异常,确保在发生错误时能够回滚事务。
  • 使用Spring的@Transactional注解时,默认情况下,运行时异常和错误会触发事务回滚,而检查型异常则不会。你可以通过rollbackFor和noRollbackFor属性来自定义回滚行为。
7. 数据库和存储引擎的支持:
  • 确保你的数据库和存储引擎支持行级锁(如InnoDB)。
  • 不同的存储引擎在锁的实现和性能上可能会有所不同。
8. 测试和验证:
  • 在开发过程中,对使用@Transactional和FOR UPDATE的代码进行充分的测试,以确保它们按预期工作。
  • 使用压力测试和并发测试来验证事务的性能和稳定性。

总结篇:

通过注意这些方面,你可以更有效地在Spring应用中使用@Transactional和SQL查询中的FOR UPDATE子句,从而确保数据的一致性和应用的性能。

在这里插入图片描述

我是杰叔叔,一名沪漂的码农,下期再会!

相关文章:

【实战场景】@Transactional中使用for update的注意点

【实战场景】Transactional中使用for update的注意点 开篇词:干货篇:知识回顾注意点1.锁的范围和粒度:2.事务的隔离级别:3.死锁:4.性能影响:5.事务的边界:6.异常处理:7. 数据库和存储…...

好用的声音分析的软件和网站

有许多软件和网站可以帮助进行声音分析,从专业级的音频处理软件到在线工具,以下是一些推荐: 专业音频分析软件 Audacity 开源且免费的音频编辑和分析工具。提供基本的音频录制、编辑和分析功能。支持多种插件,扩展其功能。 Adob…...

开发情绪识别人工智能时的道德考量

情绪调节人工智能是机器学习领域的最新技术进步之一。尽管它显示出巨大的潜力,但道德问题将影响其采用率和寿命。人工智能开发人员能克服这些问题吗? 什么是情绪识别人工智能? 情绪识别人工智能是一种机器学习模型。它通常依赖于计算机视觉…...

MongoDB:基础语句及练习

一 基本命令 1.显示所有数据库 show dbs show databases 2.进入某个数据库 use 数据库名称 3.显示当前数据库信息 db.stats() 4.显示当前数据库的所有集合 show collections 5.显示当前数据库 db 在 MongoDB 里,数据库和集合都不用手动创建: 当使用“us…...

百度智能云创新业务部总经理李想:发挥AI企业科技创新优势 助力职业教育人才扬帆远航

前言:百度智能云教育行业解决方案作为百度智能云旗下的创新力量,专注于培养“AI教育”领域的新质生产力人才,一直以来备受职业教育领域的关注。在第六届人工智能“职教百强”院校长论坛开幕之际,中教全媒体对话论坛嘉宾百度智能云…...

了解股票沽空及其风险

什么是股票沽空? 股票沽空是一种投资策略,投资者通过借入股票并在市场上卖出,期望在未来以更低的价格买回股票,以赚取价差收益。这一策略在市场下跌时尤为常见,因为投资者可以从股票价格的下跌中获利​。 股票沽空的…...

【Sql Server修改列类型错误信息:对象名依赖于列】

Sql Server修改列类型错误信息:对象名依赖于列 报错信息解决方法测试sql语句 报错信息 修改表中列类型,发生报错如下: [SQL Server]对象DF__Forecast___isCal__4E746892 依赖于 列isCalcFinished。 (5074) [42000] [Microsoft][ODBC Driver…...

【ACM珠海分会,IEEE Fellow加盟,CPS出版】第四届管理科学和软件工程国际学术会议(ICMSSE 2024,7月19-21)

第四届管理科学和软件工程国际学术会议(ICMSSE 2024)由ACM珠海分会,广州番禺职业技术学院主办;全国区块链行业产教融合共同体,AEIC学术交流中心承办,将于2024年7月19-21日于广州召开。 会议旨在为从事管理与软件工程领域的专家学…...

kmeans.fit_predict 和 kmeans.fit有什么区别

KMeans 是 scikit-learn 库中用于执行 K-means 聚类算法的类。fit_predict 和 fit 是该类中的两个方法,的主要区别在于返回的内容和用途。 kmeans.fit: 用途: 用于训练 K-means 模型。输入: 接受一个特征矩阵(通常是二维数组)作为输入。输出:…...

香港优才计划续签难吗?一次性说清楚优才续签要求,不在香港居住也能续签成功!

香港优才计划续签难吗?这个问题对考虑申请优才的人来说,还是挺重要的。我们申请优才,最关注的2个问题,一个是获批,还有一个就是续签了。 毕竟我们费那么大功夫申请优才,可不只是为了一个为期3年的香港临时…...

react获取访问过的路由历史记录

看了下,好像没有很好的解决方案,之前的useHistory现在也用不了了, chatgpt说使用useMatch,也报错 看了下浏览器原生的。本来浏览器就会限制这个histroy的读取,只能获取length https://developer.mozilla.org/zh-CN/…...

基于深度学习的点云降噪

基于深度学习的点云降噪是一种利用深度学习模型处理三维点云数据,以去除噪声并恢复点云的原始形状和细节的方法。点云数据广泛应用于自动驾驶、机器人导航、3D扫描和虚拟现实(VR)等领域,因此高质量的点云数据处理至关重要。以下是…...

数据结构-二叉搜索树与红黑树

4.二叉搜索树 又叫二叉查找树、有序二叉树、排序二叉树。树中任意一个结点,其左子树的每个节点值都要小于该节点,其右子树的每个节点值都要大于该节点 作用:能够进行快速查找、插入、删除操作 4.1 二叉搜索树的时间复杂度 注:二…...

52771-009P 同轴连接器

型号简介 52771-009P是Southwest Microwave的连接器。这款连接器外导体外壳、耦合螺母和电缆夹紧螺母都采用了不锈钢 UNS-S30300 材料。不锈钢具有优异的耐腐蚀性和机械强度,能够保证连接器在各种恶劣环境下都能稳定工作。 型号特点 中心触点、外壳、衬套固定环&am…...

鸿蒙语言基础类库:【@ohos.util.Vector (线性容器Vector)】

线性容器Vector 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 Vect…...

使用Python绘制堆积面积图

使用Python绘制堆积面积图 堆积面积图效果代码 堆积面积图 堆积面积图是面积图的一种扩展,通过堆积多个区域展示不同类别数据的累积变化。常用于显示不同部分对整体的贡献。 效果 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pQbW4F…...

代码还原动态调试之 pstree 乘法变加法

乘法编译后&#xff0c;生成加法汇编&#xff0c;提升CPU执行效率&#xff1b; 406a: 85 ff test %edi,%edi // x ? 0406c: 0f 84 7e 00 00 00 je 40f0 <__sprintf_chkplt0x1980>*/int digits, div;if (x ! 0) {/*4072: 89 fd …...

C++:获取当前可执行核心数(开辟线程)

sysconf(_SC_NPROCESSORS_ONLN) 是一个在 POSIX 兼容系统上广泛使用的函数&#xff0c;它用于获取当前系统上可用的处理器&#xff08;CPU 核心&#xff09;的数量。这个函数是 sysconf 函数的一个特定调用&#xff0c;其中 _SC_NPROCESSORS_ONLN 是一个常量&#xff0c;指定了…...

【简历】吉林某985大学:JAVA实习简历指导,面试通过率相当低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这份简历是一个顶级985吉林大学的同学投Java职位的简历。因为学校是顶级985&#xff0c;所以他的大厂简历通过率是比较高的&#xff0c;…...

C#中的MD5摘要算法与哈希算法

文章目录 一、哈希算法基础二、MD5 算法原理三、MD5摘要算法四、哈希算法五、C#实现示例MD5算法示例哈希算法示例字符串MD5值对比 六、总结 一、哈希算法基础 哈希算法是一种单向密码体制&#xff0c;它将任意长度的数据转换成固定长度的字符串。这种转换是不可逆的&#xff0…...

为什么你的HIS系统总接不住Perplexity查询请求?5类认证鉴权错配场景,运维团队今夜必须修复

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity医院查询功能的架构本质与通信契约 Perplexity医院查询功能并非传统单体服务的简单封装&#xff0c;而是一个面向语义理解与多源异构数据协同的轻量级服务网关。其核心架构采用“查询意图解析—上下…...

座机号码认证支持哪些机型?固话企业认证覆盖华为/小米/OPPO/vivo等手机

很多做业务的朋友都有这种体会&#xff1a;好不容易联系到一个精准意向客户&#xff0c;电话拨过去&#xff0c;还没等开口&#xff0c;对方直接挂断。更有甚者&#xff0c;手机屏幕上赫然跳出“疑似推销”四个大字。现在的职场沟通&#xff0c;信任成本高得离谱。如果你还指望…...

企业级AI Agent实战:如何解决异常考勤处理滞后与薪资核算难题?

摘要&#xff1a; 在2026年企业数字化转型步入深水区的今天&#xff0c;考勤管理与薪资核算的脱节已成为制约组织效能的隐形枷锁。作为一名在企业架构领域摸爬滚打15年的架构师&#xff0c;我观察到无数企业陷入“异常考勤处理滞后、员工满意度低、薪资核算频错”的恶性循环。传…...

DDR3 颗粒信号定义解析

本文围绕 DDR3 标准信号定义、核心信号工作原理、PCB Layout 等长设计规则及行业常见误区展开&#xff0c;全程聚焦工程实践与底层原理。一、DDR3 标准信号完整清单&#xff08;x16 位宽基准&#xff0c;x32 位宽对应翻倍&#xff09;1. 数据信号&#xff08;Data&#xff09;表…...

观察Taotoken模型广场在项目初期技术选型中的辅助作用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken模型广场在项目初期技术选型中的辅助作用 在启动一个涉及大模型能力的新项目时&#xff0c;技术选型往往是第一道门槛…...

加密货币社区 Google 官方邮件钓鱼威胁机理与防御体系研究

摘要 2026 年 5 月&#xff0c;加密货币社区出现依托 Google 官方邮件通道实施的高级钓鱼攻击&#xff0c;比特币开发者 Jameson Lopp 公开预警&#xff0c;该攻击通过伪装系统安全提示、篡改发件人显示名、滥用可信邮件基础设施&#xff0c;使传统安全告警失效&#xff0c;对新…...

毕业设计 深度学习多目标跟踪 实时检测

文章目录 0 前言2 目标跟踪效果3 目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 &#x1f525; 今天学长向大家分享一个毕业设计项目 为了大家能够顺利以及最少的精力通过毕设&…...

PyTorch 自动混合精度库背后的谜团

原文&#xff1a;towardsdatascience.com/the-mystery-behind-the-pytorch-automatic-mixed-precision-library-d9386e4b787e?sourcecollection_archive---------4-----------------------#2024-09-17 如何通过三行代码实现 2 倍速度提升的模型训练 https://mengliuz.medium.…...

告别刺耳噪音!ESP32 PWM驱动无源蜂鸣器,从调频到调占空比的音效实战

ESP32音效魔法&#xff1a;PWM驱动无源蜂鸣器的进阶实战指南 从刺耳噪音到悦耳旋律的蜕变之旅 当无源蜂鸣器发出刺耳的"滴滴"声时&#xff0c;很多创客的第一反应是降低音量或缩短发声时间。但真正的解决方案藏在ESP32的PWM&#xff08;脉冲宽度调制&#xff09;模块…...

Creo二次开发避坑:用ProAsmcomppathInit搞定装配体遍历,别再卡在ProFeature转ProAsmcomppath了

Creo二次开发实战&#xff1a;高效构建装配体遍历路径的深度解析 在Creo二次开发领域&#xff0c;装配体遍历是许多高级功能的基础操作&#xff0c;但开发者常常会在ProFeature到ProAsmcomppath的转换过程中遭遇瓶颈。本文将从底层数据结构入手&#xff0c;揭示一种被多数文档忽…...