位置: 编程技术 - 正文

并发环境下mysql插入检查方案(并发环境下,共享资源的正确使用方式是)

编辑:rootadmin

推荐整理分享并发环境下mysql插入检查方案(并发环境下,共享资源的正确使用方式是),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql并发处理,并发环境下ora01013用户请求取消当前的操作,mysql写并发瓶颈,并发环境下程序的特点,并发环境下程序的特点,并发环境下程序的特点,并发环境下ora01013用户请求取消当前的操作,并发环境下,共享资源的正确使用方法是(),内容如对您有帮助,希望把文章链接给更多的朋友!

业务背景: 基本业务场景是这样的,请求数据(车辆vin信息)进入到接口中,需要先判断其在数据库中的状态,如果库中不存在该vin,或者该vin状态位为“1(已完成)”,则执行一些检查操作后,将数据插入到数据库中,此时新增vin状态为0,调用人工处理接口,十分钟后返回结果,将状态置为1。如果其状态位为“0(正在处理)”则驳回操作,返回提示信息。 在单线程环境下,这样的业务没有问题,然而当并发访问接口时,会出现同时进入两条vin相同的请求AB,正常情况应该插入一条A,驳回一条B。然而并发环境下,B执行检查状态时A还没有插入,因此AB都进入到了数据库中,数据就错误了。

解决方案一: 首先想到的是使用sql处理,对数据库对应字段加唯一索引,保证一致性。如果插入重复的数据,则catch该异常,做出提示。

但是由于业务限制,vin在库中是可以重复的,多条重复数据查询最新,所以不能再vin上添加唯一索引。

并发环境下mysql插入检查方案(并发环境下,共享资源的正确使用方式是)

解决方案二: 使用mysql事务操作,将检查是否存在和插入作为一个事务进行处理,当检查失败的时候,不进行插入。从网上搜索了一下,大致思路如下:

但是这样实际上还是没有解决并发的问题,这样只是把两个操作变成了一个原子的sql操作,可以用于同时插入两条数据一致性的情况,但并不适合需求。

既然sql层面没有解决问题,就考虑从java的并发编程方向解决。 解决方案三: java解决并发问题,首先想到的是使用内置锁或者可重入锁,基本语法如下: ·内置锁: 由于是在Servlet中进行的处理,因此使用synchronized(this)直接处理业务代码,使得并发情况下,只能有一个线程访问到该段业务代码:

·可重入锁: 相当于更灵活的内置锁,在这里与内置锁基本相同

经过测试,这个方案是可行的,最终没有采用的原因是因为直接使用这种方式加锁,加锁的代码太多,影响效率。

解决方案四: 设置一个查询Map,插入前存储数据,插入后删除数据,代码如下:

这个方案基本满足了业务需求,唯一的问题是要求接口的更新时间要与业务时间错开,否则更新接口会清空vinMap,导致库中数据混乱,出现错误。

标签: 并发环境下,共享资源的正确使用方式是

本文链接地址:https://www.jiuchutong.com/biancheng/319756.html 转载请保留说明!

上一篇:MySQL在右表数据不唯一的情况下使用left join的方法(mysql显示数据库中的表)

下一篇:MYSQL锁表问题的解决方法(mysql锁表机制)

  • 矿产资源补偿费计入管理费用吗
  • 企业纳税证明是什么
  • 中小型企业营业额和从业人数
  • 公司成立之初做哪些
  • 残保金滞纳金能超过本金吗
  • 个税手续费返还政策文件
  • 免税货物需要缴纳增值税吗
  • 跨月专用发票怎么冲销
  • 行政运行经费包括项目支出吗
  • 企业将重组债务转为权益工具
  • 怎么处理善意取得的大头小尾发票?
  • 支付本月租金计入什么科目
  • 预收保费属于什么会计科目类别
  • 资质招投标
  • 小微企业减半征收城建税
  • 停车场需要对车辆负责吗
  • 个人发票增值税
  • 从业人数如何计算
  • 跨区域预缴企业所得税
  • 材料票可以直接在税务局开吗
  • 审计资产评估收费标准
  • 利润总额就是会计准则吗
  • 存货质押融资的银行
  • 公司设计费属于什么费用
  • 如何突出显示一行中的最小值
  • iphone和电脑同步
  • 办公家具折旧年限及计算方法
  • php基础函数
  • 以合同条款无法达成一致要求返还定金
  • aliapp.exe是什么意思
  • 年终奖税务筹划合法吗
  • 金融业营业税税率
  • 违反发票管理规定2次公告内容
  • php导出表格
  • 东洛锡安的金黄麦田,苏格兰 (© Scott Masterton/plainpicture)
  • cityscape dataset
  • javaweb总结笔记
  • vue table导出excel
  • 付报刊费计入什么科目
  • 生产加工型企业需要办理哪些证件
  • 金蝶软件利润表公式怎么设置
  • 非金融企业之间借款利息可以抵扣吗
  • python深入浅出
  • 收入成本怎么做账
  • 企业正常性停产什么意思
  • 个人汽车保险费可以放在公司报销吗
  • MySQL ERROR 2013 (HY000)错误解决方法
  • 预收款增值税纳税时间
  • 主营业务收入账务处理分录
  • 汇算清缴时发现收入少了
  • 以前年度损益调整怎么结转
  • 政府专项资金补助计入什么科目
  • 进项税额转出再转入
  • 计提社保公积金个税会计分录
  • 房租退回进项税额转出会计分录
  • 研发费用中专利是什么
  • 应收账款周转率计算公式
  • sqlserver数据库脚本
  • window修复系统
  • linux系统中的用户分为哪几类
  • mac win10 wifi
  • linux me
  • win8.1技巧
  • 盗版xp黑屏的解决办法
  • angular创建项目命令
  • 一个项目引多个项目
  • dos用处
  • js数组每个元素+1
  • node.js怎么搭建服务器
  • python如何判断一个变量的类型
  • Node.js中的全局对象有
  • Http TCP 协议
  • java的file类的常用操作
  • nodejs inspect
  • java教程 视
  • thinkphp withjoin
  • 安徽省马鞍山地区代码
  • 山东省水资源税征收标准
  • 重庆办理4050社保需要什么材料
  • 工业厂房房产税什么时候开始征收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设