位置: 编程技术 - 正文

并发环境下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锁表机制)

  • 账面价值大于计税基础是什么差异
  • 应纳附加税是什么
  • 企业所得税是什么意思大白话
  • 建筑发票开具与土增税扣有什么关系?
  • 小规模未达起征点免税分录
  • 个体工商户个税怎么申报
  • 应付账款转营业外收入进项税转出
  • 预付和预收可以合并吗
  • 报税软件费用可以退吗
  • 新成立的公司一般纳税人还是小规模纳税人好
  • 劳保费属于什么会计科目
  • 发出商品是用进货吗
  • 应付利息借贷
  • 飞机票改签费用怎么算1000块
  • 房地产对居民生活的影响
  • 以前年度的收入怎么调整
  • 销售中有运费收入吗
  • 发票复印件怎么打印
  • 价税合计是什么会计科目
  • 金融业营业税改增值税
  • 国税网上三方协议流程 个人所得税
  • 发票上折扣怎么记账
  • 受赠人个人所得税
  • 进口商品的关税计入入账价值吗
  • 增值税预缴税款表项目编号是什么
  • 2020工会经费退费
  • 如何玩faceit
  • 手把手教你linux
  • linux系统之间拷贝文件命令
  • 收到外单位委托办事的资金应该计入
  • 科研的成果形式
  • dat文件转换成wps表格
  • uniapp支付流程
  • 停车缴费怎么交
  • 应付未付工资企业所得税
  • 非货币性资产对外投资企业所得税例题
  • 设备租赁费怎么入账
  • yolov3输出是什么
  • ping命令可以用来测试什么
  • php 接口
  • phpcms rce
  • 向境外支付赔偿款是否需要税务备案
  • 购买的烟酒怎么入账
  • 企业摊销无形资产价值时的会计处理
  • 购买方如何申请红字信息表填写负数吗
  • 货款发票如何入账
  • 已抵扣发票红冲做进项税转出
  • 代收代缴的水电费怎么开票
  • 报销费用余额退回
  • 购入土地使用权的,以评估价格为计税依据
  • 防洪费的税率是多少
  • 已入库的原材料会计分录
  • 进项大于销项的原因
  • 出租不动产如何缴纳增值税
  • 票折费用是什么意思
  • 未开票收入下月开票会计分录
  • 公司买东西算什么费用
  • 委托加工的成本如何核算
  • win7隐藏共享文件夹
  • 在幻灯片母版中
  • freebsd 配置ip
  • linux find命令详解xargs
  • mac硬盘的常见问题及解决
  • 2021年win10累积更新
  • win10升级最新版
  • 代理服务器只能代理客户端http的请求
  • linux a
  • 微信小程序实现轮播图
  • python数据结构教程
  • jsforeach循环遍历数组
  • JavaScript中的数据类型分哪为两大类?
  • 基础的重要性
  • 汉诺塔游戏教程
  • jQuery.Callbacks()回调函数队列用法详解
  • python3 re
  • 金税盘注销后怎么开发票
  • 进口设备需要资质吗
  • 应税销售额如何计算
  • 百旺税控盘电话服务热线
  • 预到船舶是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设