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

利用无事务方式插入数据库解决并发插入问题

一、背景

由于项目中同一个网元,可能会被多个不同用户操作,而且操作大部分都是以异步子任务形式进行执行,这样就会带来并发写数据问题,本文通过利用无事务方式插入数据库解决并发插入问题,算是解决问题的一种思路,算是抛砖引玉吧。

二、方案

1.先根据id查询数据库中是否存在该数据,如果存在则代表已经插入过了,直接返回
2.如果不存在此条数据,插入数据库
3.获取插入后的自增主键id
4.防止并发场景,再次查询一次,如果id一致,则代表插入成功,如果id不一致,则代表插入失败,删除这条旧数据
5.如果id不一致,则代表插入失败,删除这条旧数据

三、代码模拟实现

 /*** 无事务插入数据库,防止并发插入* @param nodeVo 网元信息*/public void insertNode(NodeVo nodeVo){// 1.先根据id查询数据库中是否存在该数据,如果存在则代表已经插入过了,直接返回NodeVo node = nodeMapper.selectById(nodeVo.getId());if(node != null){return;}int oldId = nodeVo.getId();// 2.不存在此条数据,插入数据库nodeMapper.insert(nodeVo);// 3.获取插入后的自增主键idint newId = nodeVo.getId();// 4.防止并发场景,再次查询一次,如果id一致,则代表插入成功,如果id不一致,则代表插入失败,删除这条旧数据NodeVo newNode = nodeMapper.selectById(newId);if(newNode.getId() == newId){return;}// 5.如果id不一致,则代表插入失败,删除这条旧数据nodeMapper.deleteById(oldId);}

四、项目结构及源码下载

在这里插入图片描述

源码下载,欢迎Star: demo-springboot-mybatisplus

相关文章:

  • 深入解析 .NET Kestrel:高性能 Web 服务器的架构与最佳实践
  • 论文笔记——QWen2.5 VL
  • 二、HTML
  • curl详解
  • 从工厂到生活:算法 × 深度学习,正在改写自动化的底层逻辑
  • 机器人--架构及设备
  • 【数据结构】--- 双向链表的增删查改
  • spring-boot-maven-plugin 将spring打包成单个jar的工作原理
  • 25_04_30Linux架构篇、第1章_02源码编译安装Apache HTTP Server 最新稳定版本是 2.4.62
  • MySQL基础关键_002_DQL(一)
  • 湖北理元理律师事务所观察:民生债务问题的系统性解法
  • 【SpringBoot】基于mybatisPlus的博客管理系统(2)
  • 《操作系统真象还原》第十一章——用户进程
  • systemd和OpenSSH
  • (初探)强化学习路径规划的理论基础与代码实现
  • 介绍一下Files类的常用方法
  • verilog_testbench技巧
  • AI技术在当代互联网行业的崛起与重要性!
  • CUDA编程 - 如何使用 CUDA 流在 GPU 设备上并发执行多个内核 - 如何应用到自己的项目中 - concurrentKernels
  • 【影刀RPA实战案例】小红书商品数据采集
  • 五一期间全国高速日均流量6200万辆,同比增长8.1%
  • 铁路上海站迎五一假期客流最高峰,今日预计发送77万人次
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会
  • 制定出台民营经济促进法有何重大意义?全国人大常委会法工委回应
  • 中方发布《不跪!》视频传递何种信息?外交部回应
  • 中共中央、国务院关于表彰全国劳动模范和先进工作者的决定