實現功能: 1. 基於redis隊列,防止高並發的超賣 2. 基於mysql的事務加排它鎖,防止高並發的超賣
基於redis隊列工作流程: 1. 管理員根據goods表中的庫存,創建redis商品庫存隊列 2. 客戶端訪問秒殺API 3. web服務器先從redis的商品庫存隊列中查詢剩余庫存重點內容 4. redis隊列中有剩余,則在mysql中創建訂單,去庫存,搶購成功 5. redis隊列中沒有剩余,則提示庫存不足,搶購失敗重點內容
基於mysql事務和排它鎖工作流程: 1:開啟事務 2:查詢庫存,並顯示的設置寫鎖(排他鎖):SELECT * FROM goods WHERE id = 1 FOR UPDATE 3:生成訂單 4:去庫存,隱示的設置寫鎖(排他鎖):UPDATE goods SET counts = counts – 1 WHERE id = 1 5:commit,釋放鎖 注意:第二步步可以設置共享鎖,不然有可能會造成死鎖。
