秒殺
秒殺系統最重要的就是防止超賣(哈哈)。只要不虧本就行。同時秒殺系統流量一般比較大,採用同步方式效率肯定比較低。
秒殺就是請求過來,減去相應庫存,生成訂單的過程。如果庫存不足,則不能生成訂單。出錯一般就在查詢庫存和減庫存的過程中,不是同步的。
- 先提供一種簡單的思路:
減庫存的sql里加上剩餘數量>=請求秒殺數量的條件,類似
update SecKillGoods g set g.remainNum = g.remainNum - ? where g.id= ? and g.remainNum>= ?
這樣在沒次執行sql時會判斷此次秒殺請求能否成功,可以防止超賣現象。但是使用的是數據庫的行級鎖。因此對於超高qps會有效率問題。商品已經被秒殺完之後的請求,還是會走到數據庫判斷。
- 基於緩存(後續補充)