最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

使用swoole 定時(shí)器變更超時(shí)未支付訂單狀態(tài)的解決方案

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:43:20
文檔

使用swoole 定時(shí)器變更超時(shí)未支付訂單狀態(tài)的解決方案

使用swoole 定時(shí)器變更超時(shí)未支付訂單狀態(tài)的解決方案:如果對(duì)幾種方案沒(méi)有很好的想法,可以先看一下延伸閱讀里的其他方案,是一篇laravel china社區(qū)的討論 借助 swoole 定時(shí)器和 redis 的 zset 來(lái)實(shí)現(xiàn)的定時(shí)檢查并過(guò)期未支付訂單 起源于一個(gè)需求:將30分鐘內(nèi)未支付的訂單過(guò)期處理成已失效狀態(tài)。 最常規(guī)簡(jiǎn)單的解決
推薦度:
導(dǎo)讀使用swoole 定時(shí)器變更超時(shí)未支付訂單狀態(tài)的解決方案:如果對(duì)幾種方案沒(méi)有很好的想法,可以先看一下延伸閱讀里的其他方案,是一篇laravel china社區(qū)的討論 借助 swoole 定時(shí)器和 redis 的 zset 來(lái)實(shí)現(xiàn)的定時(shí)檢查并過(guò)期未支付訂單 起源于一個(gè)需求:將30分鐘內(nèi)未支付的訂單過(guò)期處理成已失效狀態(tài)。 最常規(guī)簡(jiǎn)單的解決

如果對(duì)幾種方案沒(méi)有很好的想法,可以先看一下延伸閱讀里的其他方案,是一篇laravel china社區(qū)的討論

借助 swoole 定時(shí)器和 redis 的 zset 來(lái)實(shí)現(xiàn)的定時(shí)檢查并過(guò)期未支付訂單

起源于一個(gè)需求:將30分鐘內(nèi)未支付的訂單過(guò)期處理成已失效狀態(tài)。

最常規(guī)簡(jiǎn)單的解決方案:在服務(wù)器上,跑一個(gè)定時(shí)任務(wù),去數(shù)據(jù)表中查詢數(shù)據(jù),查到未支付的訂單,update 一下這些數(shù)據(jù)的狀態(tài),

這些數(shù)據(jù)也可以存在在 redis 中,大致操作都是這樣的。數(shù)據(jù)量少,服務(wù)器沒(méi)有很多壓力的時(shí)候,這幾種方案不會(huì)突出優(yōu)劣,想用哪個(gè)用哪個(gè)。

另一種方案: 存儲(chǔ)部分: 借助 redis 的 zset 有序集合,訂單產(chǎn)生的時(shí)候, zadd orders timestamp orderid 將 orderid 保存到對(duì)應(yīng)的

orders 集合中,以時(shí)間戳作為他的 score 分值,存儲(chǔ)部分是這樣的,簡(jiǎn)單 + 占用空間內(nèi)存極小。 讀取部分: 在 swoole 啟動(dòng)時(shí),設(shè)置定時(shí)器,每分鐘去 orders set 中讀取設(shè)置的時(shí)間之前的數(shù)據(jù),個(gè)人為了測(cè)試方便,設(shè)置的讀取前一分鐘到前三十分鐘內(nèi)的數(shù)據(jù)。獲取到數(shù)據(jù)之后,根據(jù)業(yè)務(wù)邏輯處理數(shù)據(jù),然后 zrem orders orderid 命令從集合中移除對(duì)應(yīng)的 orderid。 個(gè)人以為這個(gè)方案是內(nèi)存占用和效率兼具的一個(gè)方案。 代碼如下:

order.php

<?php$server = new swoole_websocket_server("0.0.0.0", 9502);
// 在定時(shí)器中使用協(xié)程需要增加此項(xiàng)配置
$server->set(
 [
 'enable_coroutine' => true
 ]
);
$server->on('workerStart', function ($server, $workerId) {
 $redis = new Swoole\Coroutine\Redis();
 $redis->connect('127.0.0.1', 6379);
 // tick 為持續(xù)觸發(fā)的定時(shí)器
 swoole_timer_tick(10000, function() use ($redis) {
 $upperLimitTime = strtotime('-1 minute');
 $lowerLimitTime = strtotime('-30 minute');
 echo '上限時(shí)間:' . $upperLimitTime . '下限時(shí)間:' . $lowerLimitTime;
 $result = $redis->zrangebyscore('orders', $lowerLimitTime, $upperLimitTime);
 var_dump($result);
 // 根據(jù)查詢到的 id 進(jìn)行業(yè)務(wù)處理,然后 zrem orders orderid 移除處理成功的 orderid 
 });
});
$server->on('message', function (swoole_websocket_server $server, $request) {
 $server->push($request->fd, "hello");
});
$server->start();

測(cè)試過(guò)程: php order.php 開啟 swoole 監(jiān)聽,然后新起終端,在 redis 的 orders 有序集合中不斷寫入新數(shù)據(jù),效果如下圖:

延伸閱讀:

1.swoole_timer_tick 文檔

2.laravel china上的相關(guān)文章

總結(jié)

以上所述是小編給大家介紹的使用swoole 定時(shí)器變更超時(shí)未支付訂單狀態(tài)的解決方案,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

使用swoole 定時(shí)器變更超時(shí)未支付訂單狀態(tài)的解決方案

使用swoole 定時(shí)器變更超時(shí)未支付訂單狀態(tài)的解決方案:如果對(duì)幾種方案沒(méi)有很好的想法,可以先看一下延伸閱讀里的其他方案,是一篇laravel china社區(qū)的討論 借助 swoole 定時(shí)器和 redis 的 zset 來(lái)實(shí)現(xiàn)的定時(shí)檢查并過(guò)期未支付訂單 起源于一個(gè)需求:將30分鐘內(nèi)未支付的訂單過(guò)期處理成已失效狀態(tài)。 最常規(guī)簡(jiǎn)單的解決
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top