首頁 > 後端開發 > php教程 > 要做一個搶購的功能如何考慮並發

要做一個搶購的功能如何考慮並發

WBOY
發布: 2016-08-04 09:19:14
原創
1112 人瀏覽過

公司要做一個搶購的功能
如何避免並發帶來的訂單多出?
因為資料庫是mongo 無法像mysql那樣進行鎖
不知道有什麼好的解決方案?

我所想的就是用redis強行讓他排隊 但是這個太扯了..
每次創建的時候都會去查 但是害怕有那一點並發..

回覆內容:

公司要做一個搶購的功能
如何避免並發帶來的訂單多出?
因為資料庫是mongo 無法像mysql那樣進行鎖
不知道有什麼好的解決方案?

我所想的就是用redis強行讓他排隊 但是這個太扯了..
每次創建的時候都會去查 但是害怕有那一點並發..

用訊息佇列可以解決這個問題

首先你得有個設計容量。你的專案準備容納多少人搶多少產品。然後才決定用什麼技術。
如果就10個人搶,別糾結了隨便找個關係型資料庫一懟就完事了。
再多一些,可以把壓力直接壓到mongodb上。順便提下mongodb並不是沒有鎖,合理使用一樣可以鎖住不多賣,使用$inc操作符。如:

<code>db.product.update({sku: 'xxx', qty: {$gt: 0}}, {$inc: {qty: -1}})</code>
登入後複製

如果這樣不夠你用的,那該考慮隊列了

搶購這種需求涉及財務功能,財務功能肯定需要鎖定功能。

因此,要不你們牛逼的話,就自己寫中間件,想偷懶的話,還是用mysql吧。

獨立一個表出來做,就專門存放這種搶購的商品

redis應該可以實現啊。本身redis是單線程的,它的操作自然是序列化的,無需擔心並發訪問的問題。當然使用mysql不失為方便的選擇。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板