抢购、秒杀、抽奖、抢票等一般都会出现以下问题
1、对现有网站业务造成冲击,秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。
> 解决方案:将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离。
2、用户在秒杀开始前,通过不停刷新页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成负载压力。
> 解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,商品相关数据使用缓存,商品页面内容静态化
3、假设商品页面大小200K(主要是商品图片大小),那么需要的网络和服务器带宽是2G(200K×10000),这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。
> 解决方案:因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口带宽。
>
4、超卖现象,库存数量是有限的,如果同时下单人数超过了库存数量,就会导致商品超卖问题
解决方案:
要解决“超抢/超卖”的问题,核心在于保证检查库存时的操作是依次执行的,也就是串行的,即使有很多用户同时到达,也是一个个检查并给与抢购资格,一旦库存抢尽,后面的用户就无法继续了。
~~~
//下面是伪代码
//开抢前redis设置商品总库存list列表
for($i=0;$i<$goods_store;$i++)
\Redis::lpush('goods_store',1);
//开启秒杀
$user_id = \Session::get('user_id');//当前抢购用户id
$count=\Redis::lpop('goods_store');// 移出并获取列表的第一个元素 相当于商品总库存减去1 这里是原子性操作 不存在并发问题
if(!$count)
return '已经抢光了哦';
$result = \Redis::lpush('order:1',$user_id);// 记录抢购成功信息
if($result)
返回给前端 抢购成功 然后跳转另一个页面下单处理
~~~
![](https://box.kancloud.cn/8ba00c8ecd7eef1e8d65a1f667a96091_569x658.png)
文章来源:
https://www.cnblogs.com/andy-zhou/p/5364136.html
https://www.cnblogs.com/phpper/p/7085663.html
https://mp.weixin.qq.com/s?__biz=MjM5NDM4MDIwNw==&mid=2448834705&idx=1&sn=25cf3d4f6d6826e564a634901189eb8f
- 前言
- 函数参考
- Socket 函数
- socket_accept
- socket_bind
- socket_clear_error
- socket_close
- socket_connect
- socket_create_listen
- socket_create_pair
- socket_create
- socket_getpeername
- socket_getsockname
- socket_last_error
- socket_listen
- socket_read
- socket_recv
- socket_select
- socket_send
- socket_set_block
- socket_set_nonblock
- SplQueue
- 魔术方法
- 魔术常量
- 杂项
- backlog的用处
- new self()和new static()的区别
- PHP变量的生命周期
- PHP抽象类
- 对象接口
- PHP中的常用关键字
- 常量
- 内存泄露
- global 与 $GLOBAL
- 简单说明CGI和动态请求是什么
- 设计模式
- 单例模式
- 工厂模式
- 适配器模式
- 策略模式
- 观察者模式
- 控制反转IoC简介
- session
- use_trans_sid
- auto_start
- session_id
- cookie_secure
- 面试
- 数据库相关
- 语句相关
- 索引相关
- 字段相关
- PHP相关
- 字符串相关
- 函数相关
- 运算符优先级相关
- 错误相关
- redis相关
- 10个常见的Redis面试"刁难"问题
- mysql
- MySQL中的锁
- MySQL存储引擎MyISAM 和 InnoDB的区别
- MySQL半同步复制
- explain 命令详解
- 索引
- 数据库事务
- MySQL和B树的那些事
- git
- github----向开源框架提交pr的过程
- 推荐博客
- linux
- 命令
- free
- 高并发
- 抢购/秒杀功能
- 算法
- 一致性Hash算法