公司要做一個搶購的功能
如何避免並發帶來的訂單多出?
因為資料庫是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不失為方便的選擇。