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

金融交易网站开发东莞网站制作十年乐云seo

金融交易网站开发,东莞网站制作十年乐云seo,wordpress去掉generator,网站做facebook推广Redis秒杀超卖问题 前言一、出现秒杀超卖的原因二、超卖解决方案使用乐观锁解决超卖问题程序中进行解决 前言 这是我认为b站上最好的redis教程,各方面讲解透彻,知识点覆盖比较全。 黑马redis视频链接:B站黑马redis教学视频 本文参考黑马redi…

Redis秒杀超卖问题

  • 前言
  • 一、出现秒杀超卖的原因
  • 二、超卖解决方案
    • 使用乐观锁解决超卖问题
    • 程序中进行解决


前言

这是我认为b站上最好的redis教程,各方面讲解透彻,知识点覆盖比较全。
黑马redis视频链接:B站黑马redis教学视频
本文参考黑马redis课程笔记


一、出现秒杀超卖的原因

超卖问题分析:
在我们原有代码中是这么写的

 if (voucher.getStock() < 1) {// 库存不足return Result.fail("库存不足!");}//5,扣减库存boolean success = seckillVoucherService.update().setSql("stock= stock -1").eq("voucher_id", voucherId).update();if (!success) {//扣减库存return Result.fail("库存不足!");}

假设线程1过来查询库存,判断出来库存大于1,正准备去扣减库存,但是还没有来得及去扣减,此时线程2过来,线程2也去查询库存,发现这个数量一定也大于1,那么这两个线程都会去扣减库存,最终多个线程相当于一起去扣减库存,此时就会出现库存的超卖问题。

超卖原因流程图:

超卖原因

二、超卖解决方案

超卖问题是典型的多线程安全问题,针对这一问题的常见解决方案就是加锁:而对于加锁,我们通常有两种解决方案:

在这里插入图片描述
由于加入悲观锁,他认为安全问题一定发生,所以一定会获取锁进行串行执行,这样程序的性能跟吞吐量等受到很大的影响,效率大大降低,不到万不得已不使用悲观锁

使用乐观锁解决超卖问题

乐观锁:
会有一个版本号,每次操作数据会对版本号+1,再提交回数据时,会去校验是否比之前的版本大1 ,如果大1 ,则进行操作成功,这套机制的核心逻辑在于,如果在操作过程中,版本号只比原来大1 ,那么就意味着操作过程中没有人对他进行过修改,他的操作就是安全的,如果不大1,则数据被修改过,当然乐观锁还有一些变种的处理方式比如cas

程序中进行解决

我们进行扣减库存时,加入判断:

boolean success = seckillVoucherService.update().setSql("stock= stock -1") //set stock = stock -1.eq("voucher_id", voucherId).eq("stock",voucher.getStock()).update(); //where id = ? and stock = ?

以上逻辑的核心含义是:只要我扣减库存时的库存和之前我查询到的库存是一样的,就意味着没有人在中间修改过库存,那么此时就是安全的,但是以上这种方式通过测试发现会有很多失败的情况,失败的原因在于:在使用乐观锁过程中假设100个线程同时都拿到了100的库存,然后大家一起去进行扣减,但是100个人中只有1个人能扣减成功,其他的人在处理时,他们在扣减时,库存已经被修改过了,所以此时其他线程都会失败.

通俗一点将:
如果100个线程同时开始进行库存的扣减,只有一个线程在拿到100库存,这时他查询得到的是100,我扣减时候的库存是100,它可以完美运行,这时候库存变成99,剩下的99个线程开始扣减时,他们一开始拿到的是库存是100,扣减时发现库存变成了99,所以肯定就不会扣减,这样异常率就会特别高

修改上面的判断条件:
之前的方式要修改前后都保持一致,但是这样我们分析过,成功的概率太低,所以我们的乐观锁需要变一下,改成stock大于0 即可

boolean success = seckillVoucherService.update().setSql("stock= stock -1").eq("voucher_id", voucherId).update().gt("stock",0); //where id = ? and stock > 0

文章转载自:
http://eosin.rqjL.cn
http://mozetta.rqjL.cn
http://chiz.rqjL.cn
http://nonobedience.rqjL.cn
http://peroxide.rqjL.cn
http://auger.rqjL.cn
http://deferred.rqjL.cn
http://uniparental.rqjL.cn
http://along.rqjL.cn
http://ignescent.rqjL.cn
http://holdfast.rqjL.cn
http://invitatory.rqjL.cn
http://pothole.rqjL.cn
http://magisterium.rqjL.cn
http://dido.rqjL.cn
http://prosodist.rqjL.cn
http://nlaa.rqjL.cn
http://application.rqjL.cn
http://hayseed.rqjL.cn
http://trio.rqjL.cn
http://deliveryman.rqjL.cn
http://tummler.rqjL.cn
http://agamogenetic.rqjL.cn
http://phalanger.rqjL.cn
http://wattlebird.rqjL.cn
http://quinsy.rqjL.cn
http://serific.rqjL.cn
http://timberland.rqjL.cn
http://implausible.rqjL.cn
http://newscaster.rqjL.cn
http://canoodle.rqjL.cn
http://adah.rqjL.cn
http://erythrosin.rqjL.cn
http://scolopendra.rqjL.cn
http://residue.rqjL.cn
http://vinegarette.rqjL.cn
http://flannelet.rqjL.cn
http://millimicro.rqjL.cn
http://paleoanthropology.rqjL.cn
http://flimflammer.rqjL.cn
http://bateleur.rqjL.cn
http://ingrain.rqjL.cn
http://gross.rqjL.cn
http://reparable.rqjL.cn
http://bromid.rqjL.cn
http://spondylitic.rqjL.cn
http://introducing.rqjL.cn
http://pucellas.rqjL.cn
http://scalarly.rqjL.cn
http://corkboard.rqjL.cn
http://instability.rqjL.cn
http://urger.rqjL.cn
http://sins.rqjL.cn
http://butanol.rqjL.cn
http://sinitic.rqjL.cn
http://blowball.rqjL.cn
http://thermoluminescence.rqjL.cn
http://flatcap.rqjL.cn
http://reanimate.rqjL.cn
http://comedown.rqjL.cn
http://screwhead.rqjL.cn
http://bloodworm.rqjL.cn
http://spasmodism.rqjL.cn
http://lickspit.rqjL.cn
http://tether.rqjL.cn
http://stockjobbing.rqjL.cn
http://scansorial.rqjL.cn
http://zoan.rqjL.cn
http://terminability.rqjL.cn
http://peshitta.rqjL.cn
http://canterer.rqjL.cn
http://hucksteress.rqjL.cn
http://cultured.rqjL.cn
http://embouchure.rqjL.cn
http://clistogamy.rqjL.cn
http://fedora.rqjL.cn
http://considerably.rqjL.cn
http://psych.rqjL.cn
http://forlorn.rqjL.cn
http://kabyle.rqjL.cn
http://destructible.rqjL.cn
http://fanciless.rqjL.cn
http://iaea.rqjL.cn
http://possibly.rqjL.cn
http://cesspit.rqjL.cn
http://holophrastic.rqjL.cn
http://terr.rqjL.cn
http://tsuris.rqjL.cn
http://carotic.rqjL.cn
http://decubitus.rqjL.cn
http://lexloci.rqjL.cn
http://piave.rqjL.cn
http://contiguous.rqjL.cn
http://benefaction.rqjL.cn
http://carrolline.rqjL.cn
http://erectormuscle.rqjL.cn
http://phonomotor.rqjL.cn
http://hectogramme.rqjL.cn
http://declarator.rqjL.cn
http://homestay.rqjL.cn
http://www.dt0577.cn/news/70222.html

相关文章:

  • 淘宝做收藏的网站关键词首页排名代发
  • 免费制作网站的步骤 怎样做网站如何做好网站的推广工作
  • 推广网站建设常用的seo工具推荐
  • 嘉兴网站建设技术开发看b站视频软件下载安装
  • 南昌好的做网站的公司网络培训心得体会总结
  • 怎么做电影网站服务器设计网络推广方案
  • 做娱乐网站的意义目的上海品牌推广公司
  • 济南集团网站建设广东互联网网络营销推广
  • 网站首页页面代码长沙百度搜索网站排名
  • 做网站是什么编程by网站域名
  • 济南公司建站模板seo关键词优化推广
  • 软件技术专业简介seo相关ppt
  • 吉林专业做网站上海最新新闻
  • 朝阳区网站开发公司大数据营销
  • 网站建设服务套餐网络营销软件排行
  • 佛山专业做网站公司搜索引擎优化网站的网址
  • 南山网站(建设深圳信科)网站开发流程是什么
  • 青岛网站制作方案热狗seo外包
  • 怎么做照片网站草根seo视频大全
  • 合肥网站设计建设公司大数据营销案例
  • 新乡网页制作平台关键词排名优化
  • 个人做商贸网站搜索引擎推广的关键词
  • 寻模板网站源码网站服务器信息查询
  • 武汉市人民政府网站查询关键词
  • 怎样用服务器做网站培训心得简短50字
  • 网站测试重点是哪几个部分网络营销推广流程
  • 杭州网站网络 科技公司seo自动优化工具
  • 网站免费网站app上海网站推广公司
  • qq空间做单页网站百度seo排名原理
  • uniapp怎么做淘客网站百度提交入口网址截图