php抢票程序,PHP 高并发、抢票、秒杀 解决方案
对于抢票、秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案:
方案一:使用队列来实现
可以基于例如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 高并发、抢票、秒杀 解决方案相关推荐
- java 12306高并发抢票_PHP 高并发、抢票、秒杀 解决方案
对于抢票.秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案: 方案一:使用队列来实现 可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧 比如有1 ...
- 12306抢票:极限高并发带来的思考
每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会.尤其是春节期间,大家不仅使用12306,还会 ...
- 一个高并发买票的实例
2.一个高并发买票的实例: 马克-to-win:我 们现在回到春节高并发买票的问题.我们假设有一百万个人买一百张票,其中买票程序一百万个线程同时运行.不用改变mysql的缺省事务隔离级别.任何人在 ...
- api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享
前言: 一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API 源码获取:关注头条号转发文章之后私信[秒杀]查看源码获取方式! 项目的来源 项目的来源于国内IT ...
- 91免费视频Redis+Lua解决高并发场景在线秒杀问题
为何要使用Lua脚本解决商品超卖的问题呢? Redis在2.6版本后原生支持Lua脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行. 将复杂的或者多步的redis操作,写为一个脚本,一次 ...
- batocera中文整合包_分享一个整合 SSM 框架的高并发和商品秒杀项目
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...
- 高并发redis实现秒杀商品
高并发redis实现秒杀 ps:直接在redis读取插入操作 只是插入的时候要加锁 怎么加锁 http://newmiracle.cn/?p=488 public function miaoshate ...
- lua运行外部程序_一起聊聊redis(5)——c#的lua脚本应用实例之高并发抢口罩
本节内容 展示Redis数据库在高并发下实现抢口罩的例子,文章分3个实现的模式 不加锁 乐观锁 Lua脚本 前言 写于2020.2.8日疫情严重之日,抢口罩成为每晚8点档黄金时间必备节目,在报道上看到 ...
- 用实际项目分析高并发-抢霸王餐(川味观)
一.前言 高并发的经验是许多网络开发人员追求的梦想,有了这样的经验在哪里找工作都有优势,同样的资质,有这个硬指标,那你就自信很多.而在实际工作中一些中小型公司很难碰到高并发场景,在这种场景下,如何提高 ...
最新文章
- JQuery 动态创建表单,并自动提交
- NPOI 修改已存在的excel文件,设置第一行行高
- kcbzps oracle_快速进行Oracle安装及配置
- 在一个200*20的bmp中写汉字
- GridView+ZedGraph【转】
- 【opencv】——钢管计数(霍夫圆变换 + 阈值 + canny)
- 让Sql Server也能出现如VS一样的智能提示工具--资源更新
- 【POJ - 1328】Radar Installation(贪心+计算几何)安装雷达辐射岛屿
- 早上发现还是问题不断
- Web Api 接口文档制作
- 用python计算工程量_基于Python脚本程序的电缆工程量快速统计方法与流程
- DXGI抓屏优化扩展:GPU硬件编码保存文件即录像为MP4和FLV,外加麦克风+计算机声音
- 最新最全的阿里云产品手册出炉
- 40年间,“国货”如何崛起
- 桌面小部件Widget
- python中response是什么意思_对python中各个response的使用说明
- 第七章 项目招投标与合同管理
- MySQL: 备份 导入备份
- 大豆SNP位点查找V2.0
- 什么是Teardrop攻击?我们要如何防御Teardrop攻击?
热门文章
- 【算法练习】83.n 的第 k 个因子——枚举
- ALLEGRO中导入图片的方法
- catia 创建基准平面
- 自动控制系统之系统信号流图
- cas:174501-65-6|1-丁基-3-甲基咪唑四氟硼酸盐[C4MIm]BF4离子液体|颜色:Clearyellow-orange
- Windows输入ipconfig后发现有两个ip,哪个才是我们要用的ip地址呢
- 爬虫笔记-使用python爬取豆瓣短评
- 钉钉审批流的调用(官方推荐审批流)
- CSPS 2019 Day2 T1 Emiya 家今天的饭(容斥 + 计数 dp)
- js 将2019-05-31T06:41:32Z转化为Fri May 31 2019 14:42:02 GMT+0800 (中国标准时间)格式