对于抢票、秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案:

方案一:使用队列来实现

可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧

如有100张票可供用户抢,那么就可以把这100张票放到缓存中,读写时不要加锁。

当并发量大的时候,可能有500人左右抢票成功,这样对于500后面的请求可以直接转到活动结束的静态页面。进去的500个人中有400个人是不可能获得

商品的。所以可以根据进入队列的先后顺序只能前100个人购买成功。后面400个人就直接转到活动结束页面。当然进去500个人只是举个例子,至于多少可

以自己调整。而活动结束页面一定要用静态页面,不要用数据库。这样就减轻了数据库的压力。

方案二:当有多台服务器时,可以采用分流的形式实现

假设有m张票, 有n台产品服务器接收请求,有x个请求路由服务器随机转发

直接给每台产品服务器分配 m/n张票

每台产品服务器内存做计数器,比如允许m/n*(1+0.1)个人进来。

当内存计数器已满:

后面进的人, 直接跳到到转到活动结束的静态页面,

通知路由服务器,不在路由到这台服务器(这个值得商讨)。

所有产品服务器进来的m/n*(1+0.1)个人再全部转发到一台付款服务器上,进入付款环节,看谁手快了,这时候人少,加锁什么的就简单的。

方案三、如果是单服务器,可以使用Memcache锁来实现

product_key 为票的key

product_lock_key 为票锁key

当product_key存在于memcached中时,所有用户都可以进入下单流程。

当进入支付流程时,首先往memcached存放add(product_lock_key, “1″),

如果返回成功,进入支付流程。

如果不成,则说明已经有人进入支付流程,则线程等待N秒,递归执行add操作。

/*************************************************************/

我通过你的问题,想象了一下你的环境。

可能是 有100个票。 10万人抢。

你可以在服务器上做一个消息列队。不论多少人抢票,都先放入消息列队中。这样,我们就把高并发,变成了统一的单线程。

这时候一切都好办了。优点是缓解了MYSQL的瞬时压力

但缺点是,如果1秒内1万人点击抢票。有可能会造成瞬时用户访问困难。(因为大家都在列队)

如果你觉得慢了几百毫秒不能忍,那你就需要换一个做法:

做一个竞争锁,防止多个用户同时获取一张票。(票在MYSQL中)

在内存中存入一个标签,来确定是否还有票。

当内存标签说:没有票了。 剩下的用户一律歇菜。

这样的优点是不论MYSQL,还是用户,都很轻松。

缺点是,稍微有点小麻烦。 看你具体需求了。

php抢票程序,PHP 高并发、抢票、秒杀 解决方案相关推荐

  1. java 12306高并发抢票_PHP 高并发、抢票、秒杀 解决方案

    对于抢票.秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案: 方案一:使用队列来实现 可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧 比如有1 ...

  2. 12306抢票:极限高并发带来的思考

    每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会.尤其是春节期间,大家不仅使用12306,还会 ...

  3. 一个高并发买票的实例

    2.一个高并发买票的实例:  马克-to-win:我 们现在回到春节高并发买票的问题.我们假设有一百万个人买一百张票,其中买票程序一百万个线程同时运行.不用改变mysql的缺省事务隔离级别.任何人在 ...

  4. api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享

    前言: 一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API 源码获取:关注头条号转发文章之后私信[秒杀]查看源码获取方式! 项目的来源 项目的来源于国内IT ...

  5. 91免费视频Redis+Lua解决高并发场景在线秒杀问题

    为何要使用Lua脚本解决商品超卖的问题呢? Redis在2.6版本后原生支持Lua脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行. 将复杂的或者多步的redis操作,写为一个脚本,一次 ...

  6. batocera中文整合包_分享一个整合 SSM 框架的高并发和商品秒杀项目

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...

  7. 高并发redis实现秒杀商品

    高并发redis实现秒杀 ps:直接在redis读取插入操作 只是插入的时候要加锁 怎么加锁 http://newmiracle.cn/?p=488 public function miaoshate ...

  8. lua运行外部程序_一起聊聊redis(5)——c#的lua脚本应用实例之高并发抢口罩

    本节内容 展示Redis数据库在高并发下实现抢口罩的例子,文章分3个实现的模式 不加锁 乐观锁 Lua脚本 前言 写于2020.2.8日疫情严重之日,抢口罩成为每晚8点档黄金时间必备节目,在报道上看到 ...

  9. 用实际项目分析高并发-抢霸王餐(川味观)

    一.前言 高并发的经验是许多网络开发人员追求的梦想,有了这样的经验在哪里找工作都有优势,同样的资质,有这个硬指标,那你就自信很多.而在实际工作中一些中小型公司很难碰到高并发场景,在这种场景下,如何提高 ...

最新文章

  1. JQuery 动态创建表单,并自动提交
  2. NPOI 修改已存在的excel文件,设置第一行行高
  3. kcbzps oracle_快速进行Oracle安装及配置
  4. 在一个200*20的bmp中写汉字
  5. GridView+ZedGraph【转】
  6. 【opencv】——钢管计数(霍夫圆变换 + 阈值 + canny)
  7. 让Sql Server也能出现如VS一样的智能提示工具--资源更新
  8. 【POJ - 1328】Radar Installation(贪心+计算几何)安装雷达辐射岛屿
  9. 早上发现还是问题不断
  10. Web Api 接口文档制作
  11. 用python计算工程量_基于Python脚本程序的电缆工程量快速统计方法与流程
  12. DXGI抓屏优化扩展:GPU硬件编码保存文件即录像为MP4和FLV,外加麦克风+计算机声音
  13. 最新最全的阿里云产品手册出炉
  14. 40年间,“国货”如何崛起
  15. 桌面小部件Widget
  16. python中response是什么意思_对python中各个response的使用说明
  17. 第七章 项目招投标与合同管理
  18. MySQL: 备份 导入备份
  19. 大豆SNP位点查找V2.0
  20. 什么是Teardrop攻击?我们要如何防御Teardrop攻击?

热门文章

  1. 【算法练习】83.n 的第 k 个因子——枚举
  2. ALLEGRO中导入图片的方法
  3. catia 创建基准平面
  4. 自动控制系统之系统信号流图
  5. cas:174501-65-6|1-丁基-3-甲基咪唑四氟硼酸盐[C4MIm]BF4离子液体|颜色:Clearyellow-orange
  6. Windows输入ipconfig后发现有两个ip,哪个才是我们要用的ip地址呢
  7. 爬虫笔记-使用python爬取豆瓣短评
  8. 钉钉审批流的调用(官方推荐审批流)
  9. CSPS 2019 Day2 T1 Emiya 家今天的饭(容斥 + 计数 dp)
  10. js 将2019-05-31T06:41:32Z转化为Fri May 31 2019 14:42:02 GMT+0800 (中国标准时间)格式