首先我们要知道超卖的原因是什么:超卖的原因主要是用户下的订单的数目和我们要促销的商品的数目不一致导致的,每次总是订单的数比我们的促销商品的数目要多。究其深层原因,是因为数据库底层的写操作和读操作可以同时进行,虽然写操作默认带有隐式锁(即对同一数据不能同时进行写操作)但是读操作默认是不带锁的,所以当用户1去修改库存的时候,用户2依然可以都到库存为1,所以出现了超卖现象。

解决方案有以下几种:

第一种方案是:在每次下订单前我们判断促销商品的数量够不够,不够不允许下订单,更改库存量时加上一个条件,只更改商品库存大于 0 的商品的库存,当时我们使用 ab 进行压力测试,当并发超过 500,访问量超过 2000 时,还是会出现超卖现象。

第二种方案是:使用 mysql 的事务加排他锁来解决,首先我们选择数据库的存储引擎为 innoDB,使用的是排他锁实现的,刚开始的时候我们测试了下共享锁,发现还是会出现超卖的现象。有个问题是,当我们进行高并发测试时,对数据库的性能影响很大,导致数据库的压力很大。

第三种方案是:使用文件锁实现。当用户抢到一件促销商品后先触发文件锁,防止其他用户进入,该用户抢到促销品后再解开文件锁,放其他用户进行操作。这样可以解决超卖的问题,但是会导致文件得 I/O 开销很大。

第四种方案是:最后我们使用了 redis 的队列来实现。将要促销的商品数量以队列的方式存入 redis 中,每当用户抢到一件促销商品则从队列中删除一个数据,确保商品不会超卖。这个操作起来很方便,而且效率极高,最终我们采取这种方式来实现。

使用的话我还是建议使用第四种方案。

java商城如何防止超卖_电商中怎么防止超卖相关推荐

  1. mysql怎么做库存管理_电商中的库存管理实现-mysql与redis

    库存是电商系统的核心环节,如何做到不少卖,不超卖是库存关心的核心业务问题.业务量大时带来的问题是如何更快速的处理库存计算. 此处以最简模式来讨论库存设计. 以下内容只做分析,不能直接套用,欢迎各位同道 ...

  2. 电商中怎么防止超卖问题

    首先我们要知道超卖的原因是什么:超卖的原因主要是用户下的订单的数目和我们要促销的商品的数目不一致导致的,每次总是订单的数比我们的促销商品的数目要多.究其深层原因,是因为数据库底层的写操作和读操作可以同 ...

  3. leyou商城项目搭建(1)-电商行业及乐优商城介绍

    leyou商城项目搭建(1)-电商行业介绍 1.了解电商行业 1.1.项目分类 1.1.1.传统项目 1.1.2.互联网项目 1.2.电商行业的发展 1.2.1.钱景 1.2.2.数据 1.2.3.技 ...

  4. Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析

    Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...

  5. 老吴做了15年电商,从简单的卖货,到卖供应链

    老吴做了15年电商,从简单的卖货,到卖供应链,现在又卖人性,一步一个脚印走过来,掉过很多坑,都能很快爬出来,继续前进. 最主要的原因,就是老吴越来越理解电商,懂得做好电商的核心思维,才能在电商的路上越 ...

  6. HTML5期末大作业:商城页面——仿优分购电商静态网页(7个页面) HTML+CSS+JavaScript 电商购物网页HTML代码 学生网页课程设计期末作业下载 大学生网页设计制作成...

    HTML5期末大作业:商城页面--仿优分购电商静态网页(7个页面) HTML+CSS+JavaScript 电商购物网页HTML代码 学生网页课程设计期末作业下载 大学生网页设计制作成 临近期末, 你 ...

  7. java计算机毕业设计ssm木棉堂水果电商平台1r83i(附源码、数据库)

    java计算机毕业设计ssm木棉堂水果电商平台1r83i(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  8. 深圳弘辽科技电商拼多多花式“直播卖房”,千人成团“拼房”

    原标题<深圳弘辽科技电商拼多多花式"直播卖房",千人成团"拼房"> 下沉市场一直是拼多多瞄准的用户群体,低价也是拼多多的"代名词" ...

  9. 海外商城外贸多语言跨境电商商户运营版源码

    2023/5月版海外商城外贸多语言跨境电商商户入驻带客服系统电商网站运营版 外贸商城系统框架:TP6+Swoole4+Uniapp 支持多端  H5+PC+公众号+Android+IOS 打包App可 ...

  10. mysql表设计 不同价格_电商网站商品详情页,要能选择商品属情如大小,颜色,型号等,对应不同价格,数据库应该如何设计?...

    首先电商中的商品信息存储至少要2个表,第一张表:商品的基本信息,这个信息是在你刚进入商品 详情页面看到的数据,而你选择了商品规格(尺码,颜色等),此时展示的商品信息为具体的商品 下的规则信息,我们称之 ...

最新文章

  1. Tir-Hi3559AV100镜像烧写
  2. notepad 没有plugin manager_如何在没有反光镜的情况下在户外拍摄人物?
  3. java super父类的父类_合理使用父类的财富——Java中的super
  4. python 在内网windows环境下pip三方包
  5. Mach-O的动态链接相关知识
  6. MESSAGE_TYPE_X dump in RSM_DATASTATE_CHECK -6-
  7. linux 共享内存陷井,linux共享内存应用与陷阱
  8. OutOfMemoryError(内存溢出)解决办法
  9. 人工智能芯片与传统芯片的区别
  10. 将ERF格式转换成PCAP格式
  11. php教育网站设计案例_南广东区优秀网站设计案例集锦第四期
  12. 1.4.1bat脚本命令COPY 拷贝 复制到
  13. Netspark自动批量扫描powershell脚本
  14. 【教你几种禁止修改IP的方法】
  15. JPM Coin— 货币非国家化的开端 | TokenInsight
  16. mysql跨库查询语句mybatis_mybatis实现跨库多表查询
  17. 推荐效果线上评测:AB测试平台的设计与实现
  18. 计算机软考集成项目管理工程师,计算机软考系统集成项目管理工程师
  19. S3C2440-裸机篇-01 | JZ2440开发板快速上手
  20. 一个曾经失眠九年的工程师告诉你怎样拥有更好的睡眠

热门文章

  1. 我常用的轻量化哈希校验工具,右键菜单栏一键计算文件Hash~
  2. 2023计算机毕业设计SSM最新选题之java养生知识平台99ofs
  3. 贝叶斯公式求解公园凉鞋问题
  4. TOEFL wordlist 35
  5. Entrepreneur\'s Credo of the American 美国的企业家宣言
  6. CM201-1广东移动盒子YS版(易视腾代工)TTL方式保留原系统 或不保留原系统方法
  7. 【网络工程师精华篇】20个网络系统解决方案(含拓扑图),非常适合新手学习
  8. 计算机如何安装无线网络适配器,小编教你电脑无线网卡驱动怎么安装
  9. 使用Docker-Slim对Docker镜像进行瘦身打包
  10. 【只推荐一位】木东居士,带着大家一起成长的数据科学大神!