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 国际许可协议 进行许可。
评论已关闭