2 回答

TA貢獻1887條經(jīng)驗 獲得超5個贊
您所描述的是一種race condition
情況,您處理它的方式取決于業(yè)務(wù)邏輯。例如,對于缺貨的產(chǎn)品,您首先需要決定是要自動延期交貨還是要中止購買。
如果您想中止購買,您需要使用某種類型的數(shù)據(jù)庫locking
機制。鎖定可以暫時阻止對數(shù)據(jù)庫表或記錄的訪問。這個想法是,您在履行過程開始時鎖定庫存信息,并僅在處理購買后才解鎖。
當(dāng)數(shù)據(jù)庫請求遇到鎖時,它將等待直到鎖被釋放才能繼續(xù)操作(或者直到發(fā)生超時)。所以最先獲得鎖的請求,就是第一個有機會完成購買的請求。
但單獨鎖定可能還不夠,要防止您想要在database transaction
.?事務(wù)可以確保處理購買所需的所有操作成功發(fā)生,否則一切都會回滾。例如,使用交易可能會阻止您在未實際完成購買的情況下更新庫存數(shù)量。
目標是當(dāng)兩個請求幾乎同時到來時(因為沒有同時發(fā)生任何事情),其中一個請求將首先獲得鎖定,然后完成commit
購買交易。當(dāng)?shù)诙€請求最終有機會被處理時,庫存將為零,交易將失敗并發(fā)生roll-back
(假設(shè)您實施了適當(dāng)?shù)臋z查)。
您需要的具體查詢和檢查因應(yīng)用程序而異,但適用相同的概念。對于您的情況,我們沒有任何具體信息可以進一步指導(dǎo)您,因此我建議您檢查提供的鏈接以收集更多信息。
祝你好運!

TA貢獻1853條經(jīng)驗 獲得超6個贊
有一個計數(shù)器來跟蹤數(shù)據(jù)庫中剩余項目的數(shù)量。下訂單時,在更新可用商品計數(shù)之前對表應(yīng)用寫鎖。這是兩個請求無法同時更新表。
- 2 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報