91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用swoole定時器變更超時未支付訂單狀態

發布時間:2021-07-16 11:36:25 來源:億速云 閱讀:116 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關如何使用swoole定時器變更超時未支付訂單狀態,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

借助 swoole 定時器和 redis 的 zset 來實現的定時檢查并過期未支付訂單

起源于一個需求:將30分鐘內未支付的訂單過期處理成已失效狀態。

最常規簡單的解決方案:在服務器上,跑一個定時任務,去數據表中查詢數據,查到未支付的訂單,update 一下這些數據的狀態,

這些數據也可以存在在 redis 中,大致操作都是這樣的。數據量少,服務器沒有很多壓力的時候,這幾種方案不會突出優劣,想用哪個用哪個。

另一種方案: 存儲部分: 借助 redis 的 zset 有序集合,訂單產生的時候, zadd orders timestamp orderid 將 orderid 保存到對應的

orders 集合中,以時間戳作為他的 score 分值,存儲部分是這樣的,簡單 + 占用空間內存極小。 讀取部分: 在 swoole 啟動時,設置定時器,每分鐘去 orders set 中讀取設置的時間之前的數據,個人為了測試方便,設置的讀取前一分鐘到前三十分鐘內的數據。獲取到數據之后,根據業務邏輯處理數據,然后 zrem orders orderid 命令從集合中移除對應的 orderid。 個人以為這個方案是內存占用和效率兼具的一個方案。 代碼如下:

order.php

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

測試過程: php order.php 開啟 swoole 監聽,然后新起終端,在 redis 的 orders 有序集合中不斷寫入新數據,效果如下圖:

如何使用swoole定時器變更超時未支付訂單狀態

關于“如何使用swoole定時器變更超時未支付訂單狀態”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邢台市| 喀喇| 佳木斯市| 保山市| 甘泉县| 伊宁县| 澄迈县| 兰溪市| 周宁县| 墨玉县| 宜川县| 呼和浩特市| 泸溪县| 青田县| 左贡县| 霍林郭勒市| 新津县| 和静县| 迁西县| 高淳县| 舞阳县| 诸城市| 江北区| 利川市| 巴中市| 水富县| 郑州市| 泗阳县| 垣曲县| 兴和县| 峨边| 彭水| 象州县| 弋阳县| 襄汾县| 蒲城县| 宁化县| 中西区| 仙游县| 子长县| 鄂托克前旗|