濮阳杆衣贸易有限公司

主頁 > 知識庫 > 解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)

解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)

熱門標(biāo)簽:b2b外呼系統(tǒng) 四川穩(wěn)定外呼系統(tǒng)軟件 地圖標(biāo)注工廠入駐 南京手機外呼系統(tǒng)廠家 高碑店市地圖標(biāo)注app 廊坊外呼系統(tǒng)在哪買 400電話辦理的口碑 臺灣電銷 一個地圖標(biāo)注多少錢

背景

秒殺活動是絕大部分電商選擇的低價促銷,推廣品牌的方式。既可以給平臺帶來用戶量,還可以提高平臺知名度。一個好的秒殺系統(tǒng),可以提高平臺系統(tǒng)的穩(wěn)定性和公平性,獲得更好的用戶體驗,提升平臺的口碑,從而提升秒殺活動的最大價值。

本文討論云數(shù)據(jù)庫Redis版緩存設(shè)計高并發(fā)的秒殺系統(tǒng)。

秒殺的特征

秒殺活動對稀少或特價的商品進行定時定量售賣,吸引成大量的消費者進行搶購,但又只有少部分消費者可以下單成功。因此,秒殺活動將在一定時間內(nèi)產(chǎn)生比平時大幾十倍倍,上百倍的頁面訪問流量和下單請求流量。

秒殺活動可以分為3個階段:

  • 秒殺前:用戶不斷刷新商品詳情頁,頁面請求達到臨時開頭。
  • 秒殺開始:用戶點擊秒殺按鈕,下單請求達到暫時提前。
  • 秒殺后:一部分成功下單的用戶不斷刷新訂單或產(chǎn)生退單操作,大部分用戶繼續(xù)刷新商品詳情頁等待退單機會。

消費者提交的訂單,一般做法是利用數(shù)據(jù)庫的行級鎖,只有搶到鎖的請求可以進行庫存查詢和下單操作。但是在高并發(fā)的情況下,數(shù)據(jù)庫無法承受如此大的請求,往往需要整個服務(wù)被阻止,在消費者看來就是服務(wù)器停機機。

秒殺系統(tǒng)

利用系統(tǒng)的層次結(jié)構(gòu),在每個階段提前重新驗證,攔截?zé)o效流量,可以減少大量無效的流量涌入數(shù)據(jù)庫。

利用瀏覽器緩存和CDN抗壓靜態(tài)頁面流量

因此,我們需要把秒殺商品詳情頁與普通的商品詳情頁分開。關(guān)于秒殺商品詳情頁試圖將能靜態(tài)化的元素靜態(tài)化處理,除了秒殺按鈕需要服務(wù)端進行動態(tài)判斷,其他的靜態(tài)數(shù)據(jù)可以緩存在瀏覽器和CDN上。這樣,秒殺前刷新頁面導(dǎo)致的流量進入服務(wù)端的流量只有很小的一部分。

利用識讀分離Redis緩存攔截流量

CDN是第一級流量攔截,第二級流量攔截我們使用支持讀寫分離的Redis。在這一階段我們主要讀取數(shù)據(jù),讀取分離Redis能支持高達60萬以上qps,完全可以支持需求。

首先通過數(shù)據(jù)控制模塊,提前將秒殺商品緩存到標(biāo)識符分離Redis,并設(shè)置秒殺開始標(biāo)記如下:

"goodsId_count": 100 //總數(shù)
"goodsId_start": 0 //開始標(biāo)記
"goodsId_access": 0 //接受下單數(shù)
  • 秒殺開始前,服務(wù)重新讀取goodsId_Start為0,直接返回未開始。
  • 數(shù)據(jù)控制模塊將goodsId_start改為1,標(biāo)志秒殺開始。
  • 服務(wù)最大化緩存開始標(biāo)記位并開始接受請求,并記錄到redis中g(shù)oodsId_access,商品剩余數(shù)量為(goodsId_count-goodsId_access)。
  • 當(dāng)接受下單數(shù)達到goodsId_count后,繼續(xù)攔截所有請求,商品剩余數(shù)量為0。

可以拋光,最后成功參與下單的請求只有少部分可以被接受。在高并發(fā)的情況下,允許稍微多的流量進入。因此可以控制接受下單數(shù)的比例。

利用主從版Redis緩存加速庫存扣量

成功避免下單后,進入下層服務(wù),開始進行訂單信息校驗,庫存扣量。為了避免直接訪問數(shù)據(jù)庫,我們使用主從版Redis來進行庫存扣量,主從版Redis提供10萬等級的QPS。使用Redis來優(yōu)化庫存查詢,提前攔截秒殺失敗的請求,將大大提高系統(tǒng)的整體穩(wěn)定性。

通過數(shù)據(jù)控制模塊提前將庫存存入Redis,將每個秒殺商品在Redis中用一個hash結(jié)構(gòu)表示。

"goodsId" : {
 "Total": 100
 "Booked": 100
}

扣量時,服務(wù)器通過請求Redis獲取下單資格,通過以下lua腳本實現(xiàn),通過Redis是單線程模型,lua可以保證多個命令的原子性。

local n = tonumber(ARGV[1])
if not n or n == 0 then
 return 0
end
local vals = redis.call("HMGET", KEYS[1], "Total", "Booked");
local total = tonumber(vals[1])
local blocked = tonumber(vals[2])
if not total or not blocked then
 return 0
end
if blocked + n = total then
 redis.call("HINCRBY", KEYS[1], "Booked", n)
 return n;
end
return 0

先使用SCRIPT LOAD將lua腳本EVALSHA預(yù)先緩存在Redis,然后調(diào)用調(diào)用腳本,比直接調(diào)用EVAL節(jié)省網(wǎng)絡(luò)帶寬:

redis 127.0.0.1:6379>SCRIPT LOAD "lua code"
"438dd755f3fe0d32771753eb57f075b18fed7716"
redis 127.0.0.1:6379>EVAL 438dd755f3fe0d32771753eb57f075b18fed7716 1 goodsId 1

秒殺服務(wù)通過判斷Redis是否返回搶購個數(shù)n,即可知道此次請求是否扣量成功。

使用主從版Redis實現(xiàn)簡單的消息異步下單入庫

如果商品數(shù)量減少的時候,直接操作數(shù)據(jù)庫即可。如果秒殺的商品是1萬,甚至10萬等級,那數(shù)據(jù)庫鎖沖突將帶來很大的性能優(yōu)勢。。因此,利用消息組件,當(dāng)秒殺服務(wù)將訂單信息寫入消息變量后,即可認為下單完成,避免直接操作數(shù)據(jù)庫。

消息模塊組件依然可以使用Redis實現(xiàn),在R2中用列表數(shù)據(jù)結(jié)構(gòu)表示。

```java
  orderList {
   [0] = {訂單內(nèi)容}
   [1] = {訂單內(nèi)容}
   [2] = {訂單內(nèi)容}
   ...
  }

將訂單內(nèi)容寫入

```java
 LPUSH orderList {訂單內(nèi)容}

初步下單模塊從Redis中順序獲取訂單信息,將訂單寫入數(shù)據(jù)庫。

```java
  BRPOP orderList 0

通過使用Redis作為消息收發(fā)器,異步處理訂單入庫,有效的提高了用戶的下單完成速度。

數(shù)據(jù)控制模塊管理秒殺數(shù)據(jù)同步

最開始,利用識別分離Redis進行流量限制,只讓部分流量進入下單。對于下單檢驗失敗和退單等情況,需要讓更多的流量進來。因此,數(shù)據(jù)控制模塊需要定時將數(shù)據(jù)庫中的數(shù)據(jù)進行一定的計算,同步到主從版Redis,同時再同步到讀寫分離的Redis,讓更多的流量進來。

總結(jié)

到此這篇關(guān)于解密Redis助力雙11背后電商秒殺系統(tǒng)的文章就介紹到這了,更多相關(guān)redis電商秒殺系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Redis瞬時高并發(fā)秒殺方案總結(jié)
  • 基于redis分布式鎖實現(xiàn)秒殺功能
  • php+redis實現(xiàn)商城秒殺功能
  • Docker + Nodejs + Kafka + Redis + MySQL搭建簡單秒殺環(huán)境
  • php結(jié)合redis實現(xiàn)高并發(fā)下的搶購、秒殺功能的實例

標(biāo)簽:甘南 南寧 畢節(jié) 定州 泰州 伊春 拉薩 河源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)》,本文關(guān)鍵詞  解密,Redis,助力,雙,背后,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)》相關(guān)的同類信息!
  • 本頁收集關(guān)于解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    远安县| 泾阳县| 台东县| 汾阳市| 青河县| 西安市| 凌源市| 东莞市| 铁岭市| 吉林省| 阳朔县| 汝南县| 淅川县| 正镶白旗| 任丘市| 玛纳斯县| 大丰市| 察雅县| 分宜县| 福贡县| 民乐县| 壶关县| 亚东县| 隆安县| 丰宁| 崇礼县| 娱乐| 万盛区| 新巴尔虎左旗| 大姚县| 玉环县| 海安县| 嘉鱼县| 库伦旗| 金门县| 启东市| 临城县| 云南省| 萍乡市| 铜陵市| 利川市|