亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果兩個或多個請求同時出現會發生什么?

如果兩個或多個請求同時出現會發生什么?

至尊寶的傳說 2023-09-11 16:22:25
我是獨立開發者和自由職業者,我在我的城市有一個簡單的本地電子商務項目。我用 PHP MySQL 和其他前端技術開發了所有代碼。但我想如果只剩下一件商品并且兩個或更多人同時訂購同一商品會發生什么。我使用了算法,如果商品缺貨,則訂單將被取消或要求客戶取消項目,以便哪個客戶將不得不取消他的項目或哪個客戶應該下訂單。我知道這個問題看起來很愚蠢,但是,想想其他場景中的其他項目,如果我制作隨機聊天 Web 應用程序,狀態將如何影響。如果一個人在線并且沒有與任何人聊天,如何匹配帳戶。我為此嘗試過一些方法,但沒有成功。我有 3 臺電腦,其中 2 臺 PC 和一臺 Mac,我嘗試同時發出請求,但由于互聯網速度的原因,只有一臺可以下訂單,而另一臺則在 2 分鐘后收到故障消息。那么如果速度相同會發生什么呢?我是否需要添加任何類型的算法來下訂單,然后其他人保留該訂單。我正在谷歌搜索但什么也沒找到。正如我之前所說,我是一名獨立開發人員,因此沒有人詢問要做什么,或者 MySql 會處理它。哦,如果你想用 WordPress 或像 laravel 這樣的框架來做這樣的項目。我也同意你的觀點,但客戶說只使用簡單的編程語言,甚至不使用庫。
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

您所描述的是一種race condition情況,您處理它的方式取決于業務邏輯。例如,對于缺貨的產品,您首先需要決定是要自動延期交貨還是要中止購買。

如果您想中止購買,您需要使用某種類型的數據庫locking機制。鎖定可以暫時阻止對數據庫表或記錄的訪問。這個想法是,您在履行過程開始時鎖定庫存信息,并僅在處理購買后才解鎖。

當數據庫請求遇到鎖時,它將等待直到鎖被釋放才能繼續操作(或者直到發生超時)。所以最先獲得鎖的請求,就是第一個有機會完成購買的請求。

但單獨鎖定可能還不夠,要防止您想要在database transaction.?事務可以確保處理購買所需的所有操作成功發生,否則一切都會回滾。例如,使用交易可能會阻止您在未實際完成購買的情況下更新庫存數量。

目標是當兩個請求幾乎同時到來時(因為沒有同時發生任何事情),其中一個請求將首先獲得鎖定,然后完成commit購買交易。當第二個請求最終有機會被處理時,庫存將為零,交易將失敗并發生roll-back(假設您實施了適當的檢查)。

您需要的具體查詢和檢查因應用程序而異,但適用相同的概念。對于您的情況,我們沒有任何具體信息可以進一步指導您,因此我建議您檢查提供的鏈接以收集更多信息。

祝你好運!


查看完整回答
反對 回復 2023-09-11
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

有一個計數器來跟蹤數據庫中剩余項目的數量。下訂單時,在更新可用商品計數之前對表應用寫鎖。這是兩個請求無法同時更新表。


查看完整回答
反對 回復 2023-09-11
  • 2 回答
  • 0 關注
  • 118 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號