在抢购秒杀的构架设计中,网上很多都说为了防止超卖现象,应该使用锁机制来做,只有拿到锁的用户才能抢购下单;但是我觉得这个不太合理,在高并发下使用锁,一来造成请求阻塞,二来会造成抢购的不公平现象。

所以我觉得正确的设计应该是

1.抢购商品入队列,比如:redis队列,10个商品队列中就有10个元素。通过pop来取,这样避免了超卖现象。能取到元素说明抢购成功

2.由于秒杀是高并发的,所以需要异步下单处理,同样的可以把抢单成功的用户也加入到队列中比如:rabbitmq消息队列,通过消费者来处理订单数据的生成

不知道还有没有更好的解决方案?

在抢购秒杀的构架设计中,网上很多都说为了防止超卖现象,应该使用锁机制来做,只有拿到锁的用户才能抢购下单;但是我觉得这个不太合理,在高并发下使用锁,一来造成请求阻塞,二来会造成抢购的不公平现象。

所以我觉得正确的设计应该是

1.抢购商品入队列,比如:redis队列,10个商品队列中就有10个元素。通过pop来取,这样避免了超卖现象。能取到元素说明抢购成功

2.由于秒杀是高并发的,所以需要异步下单处理,同样的可以把抢单成功的用户也加入到队列中比如:rabbitmq消息队列,通过消费者来处理订单数据的生成

不知道还有没有更好的解决方案?

php 锁的使用场景,抢购秒杀的场景使用锁个人认为不太合理?相关推荐

  1. 抢购 mysql 优化_处理抢购、秒杀应用场景降低“超卖”发生几个优化方案(php)...

    加深下文件锁理论 flock-轻便的咨询文件锁定 说明 参数 handle 文件系统指针,是典型地由fopen()创建的resource(资源). operation operation可以是以下值之 ...

  2. 分布式、高并发、高性能场景(抢购、秒杀、抢票、限时竞答)数据一致性解决方案...

    技术指标: PV(Page View, 页面浏览量)在千万级别 QPS(Query Per Second, 每秒处理请求数)在百万级别 数据量在千亿级别 接口响应速度不能超过150毫秒 用户提交请求到 ...

  3. 电商抢购秒杀系统的设计_1_应用场景分析

    2019独角兽企业重金招聘Python工程师标准>>> 电商抢购秒杀系统的设计_1_应用场景分析 概述 所谓知已知彼,百战不殆,在开始详细介绍实战中的抢购秒杀系统时,我们了解一些抢购 ...

  4. php抢购排队是怎样做的,基于swoole的抢购排队通用中间件,适合抢购秒杀场景,跟具体业务解耦...

    queue Note: Replace kcloze kcloze https://github.com/YaochufaTech/swoole-queue pei.greet@gmail.com y ...

  5. redis rua解决库存问题_Redis锁完美解决高并发秒杀问题

    场景:一家网上商城做商品限量秒杀. 1 单机环境下的锁 将商品的数量存到Redis中.每个用户抢购前都需要到Redis中查询商品数量(代替mysql数据库.不考虑事务),如果商品数量大于0,则证明商品 ...

  6. Redis高并发场景下秒杀超卖解决

    目录 1 什么是秒杀 2 为什么要防止超卖 3 单体架构常规秒杀 3.1 常规减库存代码 3.2 模拟高并发 3.3 超卖现象 3.4 分析原因 4 简单实现悲观乐观锁解决单体架构超卖 4.1 悲观锁 ...

  7. mysql悲观锁关键字_MySQL悲观锁 select for update实现秒杀案例(jfinal框架)

    MySQL悲观锁 select for update实现秒杀案例(jfinal框架) 发布时间:2018-08-17作者:laosun阅读(4287) 为了方便测试,博主使用最新的jfinal框架,里 ...

  8. 简单实现redis实现高并发下的抢购/秒杀功能

    简述 抢购/秒杀是如今很常见的一个应用场景,那么高并发竞争下如何解决超抢(或超卖库存不足为负数的问题)呢? 常规写法: 查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大 ...

  9. 高并发写场景:秒杀系统库存扣减

    前言 本文中的伪代码示例均以 PHP 作为编程语言 在设计秒杀系统的库存扣减逻辑时,可能一开始想到的代码是: /*** 商品库存扣减** @param int $skuId 商品ID* @param ...

最新文章

  1. 对集合使用Comparator
  2. DOS命令下Javac命令不能执行原因
  3. awk和cut分割字符区别
  4. Matlab概率统计编程指南
  5. 网络基础(二)及HTTP协议
  6. 物理机存放mysql实例原则_MySQL优化笔记(四)--表的设计与优化(单表、多表)...
  7. java随机数函数_java随机函数详解
  8. cmw500综合测试仪使用_网络性能测试仪该怎么选
  9. I.MX6 Linux kernel LVDS backlight enable
  10. python中plot画图_matplotlib基础绘图命令之errorbar的使用
  11. 想创业?从学会需求谈判开始
  12. 创建数据库常用SQL语句
  13. 设计模式回顾——模板模式(C++)
  14. STM32 cubeIDE 堆栈大小设置
  15. 【阿里开发手册】所有的类都必须添加创建者和创建日期——在Idea中创建类时自动添加作者信息
  16. c语言数组中逗号的作用,c语言练习(4)--逗号分割字符串形成二维数组
  17. 全国高校食堂排行榜TOP10?!
  18. 理解微波射频中的特性阻抗、VSWR 和反射系数
  19. Django之爱鲜蜂项目开发 day06(三)
  20. Scrapy ImagesPipline的重写和使用

热门文章

  1. the Determine in June
  2. C#调用SCL2008 动态库SCL_API_cdecl.dll or SCL_API_Stdcall.dll,提示找不到指定模块
  3. 解决ie6、7 margin-bottom 失效问题
  4. 最新Visual Studio 2010 下载及学习资料
  5. 报错笔记:打开软件出现您缺少mfco42d.dll和msvcrtd.dl库文件
  6. php 导出csv字符串,PHP CSV字符串到数组
  7. db设计专用excel_注塑模具设计与加工解决方案
  8. idea alt+insert快捷键中implement
  9. 029_自己实现一个HashMap
  10. cf网络原因服务器无响应,CF由于网络原因连接服务器失败请重试 1033_10136