因為秒殺的商品需要存入redis中,所以需要提前將商品資訊存入redis,而不是初次有使用者訪問時在去查redis。
思路:當專案啟動時,執行查詢秒殺資訊業務。這裡用到了 @postconstruct註解,其是隨著servlet生命週期進行的。參考文章1
使用者登入存redis,有效期12分鐘@postconstruct
public
void
init
() throws exception
list goodslist = goodslistr.
getdata()
;for
(goodsvo goods : goodslist)
每次查詢返回秒殺狀態:未開始,正在進行,已結束
#todo快取html
②zk修改標記 #todo
3.7 傳送訊息佇列,建立訂單訊息,在catch中捕獲amqpexception(訊息佇列)異常,則讓庫存加1,移除售空map中對應商品標記,讓其他使用者繼續秒殺該商品。也要zk修改標記 #todo
3.8 訊息佇列監聽:
①再次查詢庫存是否有剩餘,沒有,返回;,有繼續執行
②再次判斷該使用者是否已經秒殺到,不允許重複秒殺。
③減庫存(mysql),下訂單,sql加判斷,防止變為負數
訂單表中加唯一索引,防止使用者重複購買update miaosha_goods set stock_count = stock_count -
1 where goods_id = # and stock_count >
0
這裡主要是非同步下單,先預減redis庫存,然後再修改mysql。
④建立訂單,並返回。
秒殺系統思路
隨著電商的發展,秒殺系統已經發展成為電商必不可少的組成部分,如小公尺手機的秒殺,12306的搶票,這些系統的共同特點都是 庫存只有乙份,瞬時流量非常大,所有人會在集中的時間讀和寫這些資料,多個人讀乙個資料 讀寫衝突,鎖非常嚴重,這是秒殺業務難的地方。那我們怎麼構建秒殺業務的架構呢?構建架構需要總體做...
秒殺系統優化思路
一 秒殺業務為什麼這麼難做 秒殺系統,庫存只有乙份,所有人會在集中的時間讀和寫這些資料。例如 那我們怎麼優化秒殺業務呢?二 優化方向 以上的兩個場景要優化有兩個方向 三 常見秒殺架構 常見的秒殺架構基本是這樣的 四 各層優化細節 回顧一下我們12306剛出來那年搶票的場景,點選 查詢 按鈕之後,系統...
秒殺系統設計整理
乙個秒殺系統的設計,涵蓋若干要素。比如 每乙個要素,都是解決乙個具體的問題場景。讀寫請求分離 秒殺一般分為2個階段,秒殺準備階段,秒殺階段。在秒殺準備階段,一般流量會逐漸上公升,使用者會不斷的查詢秒殺商品等待開始。在這個階段,按資源型別的區別,分為靜態資源 動態介面。靜態資源提前走cdn部署或者類似...