成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

完美解密Redis與秒殺系統!!!

存儲 存儲軟件 Redis
秒殺活動是絕大部分電商選擇的低價促銷、推廣品牌的方式。不僅可以給平臺帶來用戶量,還可以提高平臺知名度。一個好的秒殺系統,可以提高平臺系統的穩定性和公平性,獲得更好的用戶體驗,提升平臺的口碑,從而提升秒殺活動的最大價值。

 [[320714]]

背景

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

本文討論Redis緩存設計高并發的秒殺系統。

秒殺的特征

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

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

秒殺前:用戶不斷刷新商品詳情頁,頁面請求達到瞬時峰值。

秒殺開始:用戶點擊秒殺按鈕,下單請求達到瞬時峰值。

秒殺后:一部分成功下單的用戶不斷刷新訂單或者產生退單操作,大部分用戶繼續刷新商品詳情頁等待退單機會。

消費者提交訂單,一般做法是利用數據庫的行級鎖,只有搶到鎖的請求可以進行庫存查詢和下單操作。但是在高并發的情況下,數據庫無法承擔如此大的請求,往往會使整個服務blocked,在消費者看來就是服務器宕機。

秒殺系統

 

 

 

 

秒殺系統的流量雖然很高,但是實際有效流量是十分有限的。利用系統的層次結構,在每個階段提前校驗,攔截無效流量,可以減少大量無效的流量涌入數據庫。

利用瀏覽器緩存和CDN抗壓靜態頁面流量

秒殺前,用戶不斷刷新商品詳情頁,造成大量的頁面請求。所以,我們需要把秒殺商品詳情頁與普通的商品詳情頁分開。對于秒殺商品詳情頁盡量將能靜態化的元素靜態化處理,除了秒殺按鈕需要服務端進行動態判斷,其他的靜態數據可以緩存在瀏覽器和CDN上。這樣,秒殺前刷新頁面導致的流量進入服務端的流量只有很小的一部分。

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

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

首先通過數據控制模塊,提前將秒殺商品緩存到讀寫分離Redis,并設置秒殺開始標記如下:

 

  1. "goodsId\_count": 100 //總數"goodsId\_start": 0   //開始標記"goodsId_access": 0  //接受下單數 

1、秒殺開始前,服務集群讀取goodsId_Start為0,直接返回未開始。

2、數據控制模塊將goodsId_start改為1,標志秒殺開始。

3、服務集群緩存開始標記位并開始接受請求,并記錄到redis中goodsId_access,商品剩余數量為(goodsId_count - goodsId_access)。

4、當接受下單數達到goodsId_count后,繼續攔截所有請求,商品剩余數量為0。

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

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

成功參與下單后,進入下層服務,開始進行訂單信息校驗,庫存扣量。為了避免直接訪問數據庫,我們使用主從版Redis來進行庫存扣量,主從版Redis提供10萬級別的QPS。使用Redis來優化庫存查詢,提前攔截秒殺失敗的請求,將大大提高系統的整體吞吐量。

通過數據控制模塊提前將庫存存入Redis,將每個秒殺商品在Redis中用一個hash結構表示。

 

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

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

 

  1. 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腳本提前緩存在Redis,然后調用EVALSHA調用腳本,比直接調用EVAL節省網絡帶寬:

 

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

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

使用主從版Redis實現簡單的消息隊列異步下單入庫

扣量完成后,需要進行訂單入庫。如果商品數量較少的時候,直接操作數據庫即可。如果秒殺的商品是1萬,甚至10萬級別,那數據庫鎖沖突將帶來很大的性能瓶頸。因此,利用消息隊列組件,當秒殺服務將訂單信息寫入消息隊列后,即可認為下單完成,避免直接操作數據庫。

1、消息隊列組件依然可以使用Redis實現,在R2中用list數據結構表示。

 

  1. orderList {     \[0\] = {訂單內容}      \[1\] = {訂單內容}     \[2\] = {訂單內容}     ... } 

2、將訂單內容寫入Redis:

 

  1. LPUSH orderList {訂單內容} 

3、異步下單模塊從Redis中順序獲取訂單信息,并將訂單寫入數據庫。

 

  1. BRPOP orderList 0 

通過使用Redis作為消息隊列,異步處理訂單入庫,有效的提高了用戶的下單完成速度。

數據控制模塊管理秒殺數據同步

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

責任編輯:武曉燕 來源: 架構之路
相關推薦

2020-10-14 07:20:53

高并發

2020-09-01 07:47:32

Redis秒殺微信

2016-01-06 10:10:25

2019-07-23 13:32:13

Java開發代碼

2021-07-09 07:21:40

SpringBootRedisLUA

2024-07-05 15:05:00

2014-09-18 09:59:41

安卓郵箱適配屏幕

2018-09-15 04:59:01

2012-04-26 19:37:36

保護系統沙龍

2025-05-28 02:20:00

2023-11-27 18:07:05

Go并發編程

2020-12-02 06:14:35

秒殺系統

2022-08-26 10:24:48

架構Golang

2020-08-24 07:55:48

解密系統架構

2024-09-23 08:03:13

2019-10-30 16:54:08

golangredis數據庫

2024-04-19 08:32:07

Redis緩存數據庫

2024-10-10 17:23:31

2018-11-16 09:51:07

Redis分離秒殺

2021-06-23 06:48:42

秒殺Java電商
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品一区二区 | av在线播放一区二区 | 欧美日韩亚洲一区 | 在线日韩精品视频 | 精品国产乱码久久久久久a丨 | 午夜视频一区二区 | 三级在线免费 | 久久综合久久久 | 亚洲高清在线 | 色综合久 | av官网在线 | 亚洲网站免费看 | 中日韩av | 色综合色综合 | 欧美日韩在线一区二区三区 | 国产乱码精品一品二品 | 亚洲午夜视频在线观看 | 国产精品视频在线播放 | 成人av在线播放 | 欧美日韩久久精品 | 不卡一区二区三区四区 | www.久久久.com | 久久三区| 成人三级视频 | 日本一区二区不卡视频 | 亚洲婷婷六月天 | 国产电影一区二区三区爱妃记 | 羞羞视频在线观看 | 国产一区二区三区在线 | 久久久久久久一区 | 国产一区二区三区 | 一区二区三区国产精品 | 亚洲女人天堂成人av在线 | 午夜成人免费视频 | 国产免费人成xvideos视频 | 亚洲精品在线视频 | 91精品国产综合久久久密闭 | www.日本国产 | 男人天堂网站 | 一区二区三区高清 | 成人精品鲁一区一区二区 |