亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

基于redis的消息隊列和鍵空間通知實現(xiàn)商品搶購和限時支付

saucxs / 2744人閱讀

摘要:基于的消息隊列實現(xiàn)固定庫存商品搶購商品總庫存需要在后臺寫入到庫存隊里中提前寫入獲取庫存并減一寫入隊列搶購成功售賣完畢基于上面的基礎(chǔ)解決購買數(shù)量存儲,超時不支付訂單取消訂單并恢復(fù)庫存商品總庫存需要在后臺寫入到庫存隊里中提前寫入

基于Redis的消息隊列實現(xiàn)固定庫存商品搶購
//商品總庫存需要在后臺寫入到庫存隊里中,提前寫入
$redis = new Redis();
$redis->connect("127.0.0.1",6379);
$redis->auth("alloc");
$redis->select(1);
//獲取庫存并減一寫入隊列
$k = $redis->lPop("sale_count");
echo $k;
if($k>1){
    if($k-1 == 0){
        $redis->del("sale_count");
    }else{
        $redis->lPush("sale_count",$k-1);
    }
    echo "搶購成功!";
}else{
    echo "售賣完畢!";
}
基于上面的基礎(chǔ)解決購買數(shù)量存儲,超時不支付訂單取消訂單并恢復(fù)庫存
connect("127.0.0.1", 6379);
$redis->auth("alloc");
$redis->select(1);
//
$user_id = rand(1, 10000);//隨機(jī)模擬用戶ID 不去重復(fù)了實際情況下沒有重復(fù)的
$buy_num = rand(1, 9);//隨機(jī)模擬購買數(shù)量
//獲取庫存并減一寫入隊列
$k = $redis->lPop("sale_count");
if ($k > 1) {
    if ($k - $buy_num <= 0) {
        exit("庫存不足");
    }else{
        
        $redis->rPush("get_good_list", $user_id);//將搶到順序插入隊列,在守護(hù)進(jìn)程1中處理
        $redis->setex($user_id, 1800, $buy_num);//設(shè)置超時時間30分鐘
        $redis->rPush("sale_count", $k - $buy_num);
        
    } 
    
    echo "搶購成功!,請五分鐘內(nèi)支付";
} else {
    echo "售賣完畢!";
}
connect("127.0.0.1", 6379);
$redis->auth("alloc");
$redis->select(1);
//while (1){
    $user_id = $redis->lPop("get_good_list");
    if($user_id){
        //獲取購買數(shù)量
        $buy_num = $redis->get($user_id);
        //創(chuàng)建訂單
        $order_no = createOder($user_id,$buy_num);
        //設(shè)置訂單超時時間
        $redis->setex($order_no,300,1);//5分鐘未支付通知Daemon2.php

    }
//}
connect("127.0.0.1", 6379);
$redis->auth("alloc");
$redis->select(1);
//不超時
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
//創(chuàng)建事件監(jiān)聽,__keyevent@1__:expired,數(shù)字1代表數(shù)據(jù)庫序號
$redis->psubscribe(array("__keyevent@1__:expired"), "keyCallback");
// 回調(diào)函數(shù),這里寫處理邏輯
function keyCallback($redis, $pattern, $chan, $order_no){
    //獲取訂單信息 獲取購買數(shù)量
    $buy_num = getOderInfo($order_no);
    //關(guān)閉訂單
    closeOrder();
    //加入庫存
    $redis->rPush("sale_count",$redis->lPop("sale_count")+$buy_num);
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/29690.html

相關(guān)文章

  • PHP面試題

    摘要:質(zhì)量高在設(shè)計時,可重用現(xiàn)有的,在以前的項目的領(lǐng)域中已被測試過的類使系統(tǒng)滿足業(yè)務(wù)需求并具有較高的質(zhì)量。代碼塊捕獲異常,并創(chuàng)建一個包含異常信息的對象。這樣可以解決超賣的問題,但是會導(dǎo)致文件得開銷很大。 6.你們公司是使用什么框架? 答:我們公司采用的是TP框架,運(yùn)用的mysql+apache+php進(jìn)行開發(fā),因為TP框架是一個免費(fèi)開源的,輕量級的php開發(fā)框架,而且是我們中國人自己開發(fā)的,...

    ls0609 評論0 收藏0
  • 「真?全棧之路」Web前端開發(fā)后端指南

    前言 在若干次前的一場面試,面試官看我做過python爬蟲/后端 的工作,順帶問了我些后端相關(guān)的問題:你覺得什么是后端? 送命題。當(dāng)時腦瓦特了,答曰:邏輯處理和數(shù)據(jù)增刪改查。。。 showImg(https://user-gold-cdn.xitu.io/2019/4/24/16a4ed4fc8c18078); 當(dāng)場被懟得體無完膚,羞愧難當(dāng)。事后再反思這問題,結(jié)合資料總結(jié)了一下。發(fā)現(xiàn)自己學(xué)過的Re...

    chuyao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<