摘要:基于的消息隊(duì)列實(shí)現(xiàn)固定庫存商品搶購商品總庫存需要在后臺(tái)寫入到庫存隊(duì)里中提前寫入獲取庫存并減一寫入隊(duì)列搶購成功售賣完畢基于上面的基礎(chǔ)解決購買數(shù)量存儲(chǔ),超時(shí)不支付訂單取消訂單并恢復(fù)庫存商品總庫存需要在后臺(tái)寫入到庫存隊(duì)里中提前寫入
基于Redis的消息隊(duì)列實(shí)現(xiàn)固定庫存商品搶購
//商品總庫存需要在后臺(tái)寫入到庫存隊(duì)里中,提前寫入 $redis = new Redis(); $redis->connect("127.0.0.1",6379); $redis->auth("alloc"); $redis->select(1); //獲取庫存并減一寫入隊(duì)列 $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ù)量存儲(chǔ),超時(shí)不支付訂單取消訂單并恢復(fù)庫存
connect("127.0.0.1", 6379); $redis->auth("alloc"); $redis->select(1); // $user_id = rand(1, 10000);//隨機(jī)模擬用戶ID 不去重復(fù)了實(shí)際情況下沒有重復(fù)的 $buy_num = rand(1, 9);//隨機(jī)模擬購買數(shù)量 //獲取庫存并減一寫入隊(duì)列 $k = $redis->lPop("sale_count"); if ($k > 1) { if ($k - $buy_num <= 0) { exit("庫存不足"); }else{ $redis->rPush("get_good_list", $user_id);//將搶到順序插入隊(duì)列,在守護(hù)進(jìn)程1中處理 $redis->setex($user_id, 1800, $buy_num);//設(shè)置超時(shí)時(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è)置訂單超時(shí)時(shí)間 $redis->setex($order_no,300,1);//5分鐘未支付通知Daemon2.php } //}
connect("127.0.0.1", 6379); $redis->auth("alloc"); $redis->select(1); //不超時(shí) $redis->setOption(Redis::OPT_READ_TIMEOUT, -1); //創(chuàng)建事件監(jiān)聽,__keyevent@1__:expired,數(shù)字1代表數(shù)據(jù)庫序號(hào) $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://systransis.cn/yun/29690.html
摘要:質(zhì)量高在設(shè)計(jì)時(shí),可重用現(xiàn)有的,在以前的項(xiàng)目的領(lǐng)域中已被測試過的類使系統(tǒng)滿足業(yè)務(wù)需求并具有較高的質(zhì)量。代碼塊捕獲異常,并創(chuàng)建一個(gè)包含異常信息的對象。這樣可以解決超賣的問題,但是會(huì)導(dǎo)致文件得開銷很大。 6.你們公司是使用什么框架? 答:我們公司采用的是TP框架,運(yùn)用的mysql+apache+php進(jìn)行開發(fā),因?yàn)門P框架是一個(gè)免費(fèi)開源的,輕量級(jí)的php開發(fā)框架,而且是我們中國人自己開發(fā)的,...
前言 在若干次前的一場面試,面試官看我做過python爬蟲/后端 的工作,順帶問了我些后端相關(guān)的問題:你覺得什么是后端? 送命題。當(dāng)時(shí)腦瓦特了,答曰:邏輯處理和數(shù)據(jù)增刪改查。。。 showImg(https://user-gold-cdn.xitu.io/2019/4/24/16a4ed4fc8c18078); 當(dāng)場被懟得體無完膚,羞愧難當(dāng)。事后再反思這問題,結(jié)合資料總結(jié)了一下。發(fā)現(xiàn)自己學(xué)過的Re...
閱讀 2435·2021-09-01 10:41
閱讀 1451·2019-08-30 14:12
閱讀 520·2019-08-29 12:32
閱讀 2868·2019-08-29 12:25
閱讀 2943·2019-08-28 18:30
閱讀 1713·2019-08-26 11:47
閱讀 989·2019-08-26 10:35
閱讀 2597·2019-08-23 18:06