真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

TP5如何使用Redis處理電商秒殺

這篇文章主要介紹TP5如何使用redis處理電商秒殺,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)晉江,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575

TP5使用Redis處理電商秒殺

1、首先在TP5中創(chuàng)建搶購(gòu)活動(dòng)所需要的Redis類庫(kù)文件,代碼如下:

checkLock("dataExists") && !$this->checkTableDataExists()){
 
                throw new Exception("相關(guān)產(chǎn)品數(shù)據(jù)不存在");
 
            }else{
 
                //設(shè)置檢查鎖10分鐘
 
                $this->setLock("dataExists",600);
 
            }
 
            //如果數(shù)據(jù)不存在 初始化讀取數(shù)據(jù)
 
            if (!$this->checkExists()){
 
                $this->initTableData();
 
            }
 
        }
 

        public function getScheduleCenter()
 
        {
 
            return Schedule::instance( $this->getInfoFieldValue("schedule_id"));
 
        }

        public function __destruct()
 
        {
 
            //設(shè)置15天自動(dòng)回收redis
 
            $this->setExpire((int);
 
$this>getScheduleCenter()->getInfoFieldValue("end_time")+3600*24*15);
 
        }
 
    }

2、在服務(wù)層或者控制器處理?yè)屬?gòu)邏輯,代碼如下:

public function index($data=["user_id"=>1,"ticket_detail_id"=>1,"buy_num"=>1]){
 
    try {
 
        //檢測(cè)數(shù)據(jù)存在
 
        if (!$this->checkArrayValueEmpty($data,["user_id","ticket_detail_id","buy_num"])){
 
            throw new Exception($this->error);
 
        }
 
        $user_id= $data["user_id"] ; //用戶Id
 
        $ticket_detail_id = $data["ticket_detail_id"] ; //產(chǎn)品Id
 
        $buy_num = $data["buy_num"] ; //購(gòu)買數(shù)量
 
        $infoCenter= ScheduleDetail::instance( $ticket_detail_id );
 
        $scheduleDetailInfo =$infoCenter->getInfoList();
 
        //修改數(shù)據(jù)庫(kù)后 需要運(yùn)行initTableData()方法重新初始化 推薦寫(xiě)到Hook里
 
     // $infoCenter->initTableData();
 
        if ( $infoCenter->getInfoFieldValue( "hot_schedule")){
 
            //熱門(mén)搶購(gòu)隨機(jī)過(guò)濾隨機(jī)過(guò)濾
 
            if (!in_array(rand(100, 200) % 11, [1, 3, 5, 7, 9])) {
 
                throw new Exception("搶票人數(shù)眾多 ,你被擠出搶購(gòu)隊(duì)伍,還有余票,請(qǐng)重新再搶");
 
            };
 
        }
 
        // 這里判斷 購(gòu)買數(shù)量和銷售日期 不符合就 throw new Exception
 
        if (!true){
 
            throw new Exception("這里寫(xiě)不符合原因");
 
        }
 
        if (((int)$infoCenter->getInfoFieldValue("{$user_id}_num")+$buy_num)>$scheduleDetailInfo["limit_num"] ){
 
            throw new Exception("你超過(guò)最大購(gòu)買數(shù)量");
 
        }
 
        if ($infoCenter->setInfoFieldIncre("pay_num",$buy_num) >$scheduleDetailInfo["limit_num"] ){
 
            //
 
            $infoCenter->setInfoFieldIncre("pay_num", -$buy_num);
 
            throw new Exception("對(duì)不起,票已經(jīng)賣光了!");
 
        }
 
        //這里寫(xiě)主邏輯 啟用事務(wù)功能創(chuàng)建訂單
 
        //事務(wù)參見(jiàn)下節(jié)源碼
 
        //升級(jí)已銷售數(shù)量
 
        $infoCenter->updateTableData(["pay_num"]);
 
        //在這里推薦埋鉤子 處理訂單完成的后續(xù)事情
 
         //返回結(jié)果
 
    } catch (Exception $e) {
 
        Log::error($e->getMessage());
 
        return ShowCode::jsonCodeWithoutData(1008, $e->getMessage());
 
    }
 
}
 
}

在處理邏輯中 可以使用隨機(jī)去除了一部分的購(gòu)買請(qǐng)求 以保證搶購(gòu)活動(dòng)平穩(wěn)完成

當(dāng)然也可以同時(shí)在前端請(qǐng)求中示例類似方法過(guò)濾

可以參照定時(shí)隊(duì)列判斷訂單是否處理完成 校準(zhǔn)剩余庫(kù)存

以上是“TP5如何使用Redis處理電商秒殺”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


新聞標(biāo)題:TP5如何使用Redis處理電商秒殺
文章轉(zhuǎn)載:http://weahome.cn/article/jjdodp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部