最近在做小程序商城的时候,由于活动模式采用的是先预热加入购物车,提交订单时做库存扣减。在促销开始时客户开始大量提交订单,活动内容为10件2.5折。顾客购物车商品重合度较高。且并发量特别大(日PV破千万),原来的库存扣减采用的是数据库幂等模式:即 : 提交订单时先查询数据库库存。再做库存判断,满足条件时,采用sql:

update inventory set inventory_num=inventory_num-count where inventory_num>=count;

结果由于并发量太大,导致出现很严重的锁等待问题。提交订单速度极慢。

后经过研究,决定采用redisson 对库存做处理。

首先将每个sku的库存缓存进数据库,在客户提交订单的时候,获取redisson的连锁RedissonMultiLock,将客户整个购物车内的商品作为一个整体,获取到连锁 rLock。如果rLock锁定失败,则返回错误。提示客户当前提交订单人数过多,稍后重试。获取锁成功后,开始对购物车内商品库存做出验证。验证通过,则扣除redis库存。释放连锁。并且封装出库存变动的消息,通过MQ通知到系统,对数据库库存进行有序更新。

实践证明,该方法有效,提交订单效率大大提高。单小时销售额突破800W。

注意事项:

1、RedissonMultiLock 获取锁的原理

RedissonMultiLock 是由单个锁RLock组成的,单锁获取时的 key 要和sku库存缓存用的key区分开。RLock的原理是根据当前线程号和服务器的其他信息生成一个唯一的值。然后根据获取单锁时传入的key向redis内插入信息。在释放锁时会将该key的值清空。这样就可以获取到新锁。刚做的时候,由于对RLock理解不深,单锁获取的key和sku缓存库存的key重复了,出了很多问题。

2、数据库库存仍需更新

数据库库存更新时,采用MQ,将并发转换为异步处理,数据库完全没有问题

3、取消订单返还库存,要返还进redis 并且数据库库存仍采用MQ通知消息来更新

4、所有对redis内库存的操作,必须在获取到锁并且加锁成功的情况下进系

5、以上纯属个人观点,有不正确的地方欢迎批评指正。

电商项目高并发下库存处理redisson相关推荐

  1. 谷粒商城电商项目 高可用集群篇

    更多视频,JAVA收徒 QQ:987115885谷粒商城电商项目 高可用集群篇339.k8s-简介.mp4340.k8s-架构原理&核心概念.mp4341.k8s-集群搭建-环境准备.mp43 ...

  2. 电商网站高并发下的数据安全

    我们知道在多线程写入同一个文件的时候,会存现"线程安全"的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程安全的).如果是My ...

  3. java 电商锁库存实现_电商项目扣减库存方案

    阿里巴巴b2b电商算法实战电子商务 85.3元 包邮 (需用券) 去购买 > 各位小宝贝们,大家是不是在面试过程中经常被问到,你电商项目扣减库存时,到底是下单减库存呢?还是付款减库存? 那今天给 ...

  4. Java生鲜电商平台-高并发核心技术订单与库存实战

    Java生鲜电商平台-高并发核心技术订单与库存实战 一. 问题 一件商品只有100个库存,现在有1000或者更多的用户来购买,每个用户计划同时购买1个到几个不等商品. 如何保证库存在高并发的场景下是安 ...

  5. 400集高并发分布式超级电商项目实战

    带走一盏渔火 让他温暖我的双眼 留下一段真情 让它停泊在枫桥边 久违的你 一定保存着那套网盘 许多年以后 躺在网盘里的视频 依然尘封未动 涛声依旧不见当初的夜晚 今天的你我 怎样重复昨天的故事 涛哥说 ...

  6. ActiveMQ+Redis+Dubbo+SpringMVC+Mybatis高并发高集群分布式电商项目视频课程(免费不加密)

    ActiveMQ+Redis+FastDFS+Dubbo+Nginx+SpringMVC+Mybatis高并发高集群分布式电商项目视频课程 分布式实战项目1.mp4 分布式实战项目2.mp4 分布式实 ...

  7. 如何清晰、高质量的给面试官介绍自己的电商项目

    面试有两点:1.技术过硬.2.能说会道 如果自己的技术还过的去,但是表述的不尽人意,其实是吃了很大亏的,下面我来介绍一个大神的面试过程: 面试官:请介绍一下你的电商项目. 大神:该商城是一个综合性的B ...

  8. 简历里写了电商项目 ,面试的时候怎么回答

    商项目里的技术特点? ①技术更新较快:根据市场的需求,不断迭代更新. ②技术涉及面广:除了 PHP,还会用到 Python,GO 等其他的一些语言:数据库中 MySQL,nosql 是最频繁使用的(当 ...

  9. 项目是采用目前比较流行的 SpringBoot/SpringCloudAlibaba构建新零售微服务电商项目

    简介: 技术架构 项目是采用目前比较流行的 SpringBoot/SpringCloudAlibaba构建新零售微服务电商项目,从项目中台架构技术选型.模块设计.基础设施的构建.分布式解决方 案.互联 ...

  10. 面试专题-电商项目面试篇

    找工作面试的过程中,项目将会是整个流程的核心灵魂,也是能在面试中能让面试官尽快认同你的一个强有力的依据,所以在面试中把电商项目清晰的表述出来是极为关键的. 1.说说你最近做的这个项目的背景,简单的介绍 ...

最新文章

  1. 利用vagrant快速搭建rails开发环境
  2. 中国联通通用服务器集中采购项目,中国联通启动通用服务器集采:预采购12.4万台...
  3. 通过html文件生成PDF文件
  4. 学生上课睡觉班主任怎么处理_班主任案例:学生上课睡觉应对策略
  5. 苏宁大数据怎么运营_数据驱动经营 苏宁大数据用户标签入选2019TOP100全球软件案例...
  6. MySQL 常用运算符
  7. cesium米转换经纬度_cesium 常见坐标系及坐标转换(工具篇)
  8. 总结几种常用的安全算法
  9. 会“聆听”用户,用户反馈设计
  10. Java Web学习总结(40)——JSP中的Application对象和Session对象常用方法详解
  11. 硬盘检测神器-HD Tune Pro/Hard Disk Sentinel
  12. 模电课程设计_函数发生器
  13. jQuery从上手到飞天
  14. ToolBar修改返回按钮图标,CollapsingToolbarLayout修改文字居中
  15. 根据火车的出发时间和到达时间,编写程序计算整个旅途所用的时间。比如G198次列车从青岛站出发时间为16:00,到达北京南站的时间为20:40,则整个旅途所用时间为04:40。
  16. 任正非圣诞发表文章:我在生活所迫时创立华为
  17. 小程序获取当前进页面的来源
  18. 回天转债,莱克转债上市价格预测
  19. 通行时间可调的两路口交通灯设计实验(基于Multisim仿真)
  20. node php聊天室,利用socket.io实现多人聊天室(基于Nodejs)

热门文章

  1. OpenCV 角度计算
  2. IntelliJ IDEA 创建Spring+SpringMVC+hibernate+maven项目
  3. [线性代数]向量2-范数三角不等式证明
  4. lae界面开发工具入门介绍之一新建工程篇
  5. 2017 ECNA Regional Contest-G:Question of Ingestion(dp)
  6. 九爷带你了解 深入理解 Memcache 原理
  7. py实战某股票一周收盘价折线图绘制
  8. 标学历年真题2016年版 真考题库1 电子表格
  9. Android 测试工具集01
  10. Spring boot 2 雷神