Thinkcmf5解决高并发秒杀方案

准备事项:

一、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条成功入库。

五、完毕。

  • 时间:2018-08-22 11:09:36
  • 分类:学习笔记
  • 浏览:166
  • 评论:
备案号:豫ICP备12024521号
Powered By Z-BlogPHP 技术支持:唐朝