使用Redis搭建電商秒殺系統(tǒng)
秒殺活動是絕大部分電商選擇的低價促銷、推廣品牌的方式。不僅可以給平臺帶來用戶量,還可以提高平臺知名度。一個好的秒殺系統(tǒng),可以提高平臺系統(tǒng)的穩(wěn)定性和公平性,獲得更好的用戶體驗,提升平臺的口碑,從而提升秒殺活動的最大價值。
一 秒殺的特征
秒殺活動對稀缺或者特價的商品進行定時定量售賣,吸引成大量的消費者進行搶購,但又只有少部分消費者可以下單成功。因此,秒殺活動將在較短時間內(nèi)產(chǎn)生比平時大數(shù)十倍,上百倍的頁面訪問流量和下單請求流量。
秒殺活動可以分為3個階段:- 秒殺前:用戶不斷刷新商品詳情頁,頁面請求達到瞬時峰值。
- 秒殺開始:用戶點擊秒殺按鈕,下單請求達到瞬時峰值。
- 秒殺后:一部分成功下單的用戶不斷刷新訂單或者產(chǎn)生退單操作,大部分用戶繼續(xù)刷新商品詳情頁等待退單機會。
二 秒殺系統(tǒng)
秒殺系統(tǒng)的流量雖然很高,但是實際有效流量是十分有限的。利用系統(tǒng)的層次結構,在每個階段提前校驗,攔截無效流量,可以減少大量無效的流量涌入數(shù)據(jù)庫。2.1 ?利用瀏覽器緩存和CDN抗壓靜態(tài)頁面流量
秒殺前,用戶不斷刷新商品詳情頁,造成大量的頁面請求。所以,我們需要把秒殺商品詳情頁與普通的商品詳情頁分開。對于秒殺商品詳情頁盡量將能靜態(tài)化的元素靜態(tài)化處理,除了秒殺按鈕需要服務端進行動態(tài)判斷,其他的靜態(tài)數(shù)據(jù)可以緩存在瀏覽器和CDN上。這樣,秒殺前刷新頁面導致的流量進入服務端的流量只有很小的一部分。2.2 利用讀寫分離Redis緩存攔截流量
CDN是第一級流量攔截,第二級流量攔截我們使用支持讀寫分離的Redis。在這一階段我們主要讀取數(shù)據(jù),讀寫分離Redis能支持高達60萬以上qps,完全可以支持需求。首先通過數(shù)據(jù)控制模塊,提前將秒殺商品緩存到讀寫分離Redis,并設置秒殺開始標記如下:"goodsId_count": 100 //總數(shù)"goodsId_start": 0 //開始標記"goodsId_access": 0 //接受下單數(shù)- 秒殺開始前,服務集群讀取goodsId_Start為0,直接返回未開始。
- 數(shù)據(jù)控制模塊將goodsId_start改為1,標志秒殺開始。
- 服務集群緩存開始標記位并開始接受請求,并記錄到Redis中goodsId_access,商品剩余數(shù)量為(goodsId_count - goodsId_access)。
- 當接受下單數(shù)達到goodsId_count后,繼續(xù)攔截所有請求,商品剩余數(shù)量為0。
疑問





