ThinkPHP解决高并发秒杀方案
准备事项:
一、2个表
1、PortalTagModel:插入秒杀成功用户的信息。 字段:id,status
2、SetModel:记录开放名额的信息。字段:id,ic。
二、设置产品。
SetModel表,添加数据。id=1,ic=3(3个名额)。
三、代码(采用事物处理)
$portalTagModel = new PortalTagModel();
$setsum= new SetModel();
Db::startTrans();
try{
$set=SetModel::get(1);
if($set->ic<=0){
die();
}else{
$data=['status'=>1];
$w=[];$w['id']=1;$w['ic']=['gt',0];
$portalTagModel->insert($data);
$state=$setsum->where($w)->setDec('ic',1);
if($state==0){Db::rollback();}
Db::commit();
print_r("完成");
die();
}
} catch (\Exception $e) {
Db::rollback();
}
die();
四、使用并发工具测试。
设置50人同时并发访问页面,进数据库查看入库情况,仅3条成功入库。
五、完毕。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭