大量過期訂單的處理問題

2022-08-26 12:06:11 字數 1493 閱讀 4572

描述你的問題

最近開發遇到乙個大量訂單過期處理的問題,比如我拍了乙個商品,半個小時之後他就不能付款了或者這個訂單應該被刪除掉。

第一、反應是crontab,但是考慮到每次都要去查mysql,感覺會影響效率;

第二、有人提示我用訊息佇列rabbitmq,但是我看了半天感覺訊息佇列好像沒啥用,我感覺邏輯還是拍下訂單的時候傳送訊息,然後php程序一直在那sleep?估計是我理解的不夠透徹,求大神解釋下相關流程。

第三、還有其他方法麼?大神給個具體點的方案撒~

貼上相關**

貼上報錯資訊

貼上相關截圖

描述你的問題

最近開發遇到乙個大量訂單過期處理的問題,比如我拍了乙個商品,半個小時之後他就不能付款了或者這個訂單應該被刪除掉。

第一、反應是crontab,但是考慮到每次都要去查mysql,感覺會影響效率;

第二、有人提示我用訊息佇列rabbitmq,但是我看了半天感覺訊息佇列好像沒啥用,我感覺邏輯還是拍下訂單的時候傳送訊息,然後php程序一直在那sleep?估計是我理解的不夠透徹,求大神解釋下相關流程。

第三、還有其他方法麼?大神給個具體點的方案撒~

貼上相關**

貼上報錯資訊

貼上相關截圖

低成本解決方案

插入訂單的時候同時插入過期的時間

然後服務端用cli模式不斷查詢mysql資料庫就行啊

建立mysql過期時間的索引 並不會影響效率

如果對運營成本有要去的話,可以通過使用者觸發模式來實現:

在拍完商品的同時設定"過期時間" datetime。

使用者對該商品的任何更新都要同時更新"過期時間"。

每次使用者登入後,讀取相關商品的時候通過php對比當前時間(如果對時間要求嚴格,建議用js對比時間)跟商品過期時間。如果過期了,可以通過css標識當前商品已經過期。同事傳送請求到rabbitmq佇列,因為讀取商品的時候已經得到了該產品的id,所以最好的列隊資訊是要包括這個id。

後台有crontab定時讀取rabbitmq並且根據已知的id批量生產刪除的mysql語句。

這種處理方法可以節省資源,減低無服務不必要的消耗,基本上就是一次讀取,一次刪除的資料庫操作而已。非常不建議逐條刪除,也建議逐條搜尋mysql找出過期條目,最好是根據rabbitmq佇列生產批量刪除語句。

可以把訂單存進redis 給redis設定過期時間

過期時間加索引,然後定時任務去處理,每次更新固定條數就好了。比如定時指令碼每次啟動,根據條件去查詢,每次查1000條,更新狀態為過期未付款,如果結果不足1000條或是沒有結果,就說明不用查下一次了。

nosql,需要持久化的話就用redis,拍下就設定過期時間,到時間後自動刪除(這種情況就適合用nosql特性),你前台程式需要進行判斷。

2.如果不允許用redis的話(就是用mysql類關係型資料庫咯),也是拍下的時候設定過期時間戳,然後在訂單相關頁面手動進行是否過期(如果過期時間和訂單在乙個表,不會浪費資源啊,取多乙個字段而已)

是我的理解錯了嗎,為什麼需要crontab和訊息佇列??

**:

大量資料處理問題

1.根據快速排序劃分的思想 1 遞迴對所有資料分成 a,b b b,d 兩個區間,b,d 區間內的數都是大於 a,b 區間內的數 2 對 b,d 重複 1 操作,直到最右邊的區間個數小於100個。注意 a,b 區間不用劃分 3 返回上乙個區間,並返回此區間的數字數目。接著方法仍然是對上一區間的左邊進...

mysql 大量資料處理問題

一 大量資料儲存問題解決方法 分割槽 分表 原則 多利用點記憶體,減輕磁碟io負載,因為io往往是資料庫伺服器的瓶頸 區別 1,實現方式上 mysql的分表是真正的分表,一張表分成很多表後,每乙個小表都是完正的一張表 分割槽不一樣,一張大表進行分割槽後,他還是一張表,不會變成二張表,但是他存放資料的...

處理問題的方法

1.遇到問題不要急躁,盲目的急於去解決這乙個問題。不妨冷靜思考一下,這個問題出現的原因,其他相關頁面會不會出現類似的問題,修改後對其他的頁面會不會產生影響。這樣就可以避免修改部分正常了,卻又出現了新的問題,導致工作量增大。2.對時間明確管理,要明確知道自己的工作量,能夠合理安排自己每天的工作。給自己...