Redis 秒殺系統分析需求

2021-10-01 23:23:07 字數 1269 閱讀 4609

如圖所示,第一層是前端攔截層、第二層是閘道器處理層、第三層是業務邏輯層、第四層是db入庫。在第三層中我們會用到redis,這篇部落格是秒殺系統中的redis的應用場景,所以這篇部落格主要講解業務邏輯層。

簡單講一件閘道器處理層的實現,閘道器處理層主要處理後端流量資料的攔截,比如說我們有幾十萬的使用者同時進行乙個秒殺的功能,那麼我們就會有這麼多的使用者的請求進來, 那麼這麼多的使用者請求進來之後我們要進行乙個攔截。

我們可以利用redis的incr來控制流量攔截。

首先通過資料控制模組,提前將秒殺商品快取到讀寫分離redis,並設定秒殺開始標記如下:

"skuid_start" : 0  // 開始標記 初始值為0

"skuid_count" : 10000 // 商品庫存總數 初始值為10000

"skuid_access" : 12000 // 接收搶購數 初始值為0

秒殺開始前,服務集群讀取skuid_start為0,直接返回活動未開始。

資料控制模組將skuid_start改為1, 標誌秒殺開始。

當接收下單數達到sku_count*1.2後,攔截所有請求,商品剩餘數量為0

通過這些攔截之後進行流量放入再到業務邏輯層處理訂單業務

到了業務處理層處理訂單資訊驗, 訂單資訊校驗失敗直接返回,訂單資訊校驗通過。進入第四層運算元據庫。

利用redis快取加減庫存扣量

skuid_booked : 10000  // 總數從0開始到10000 初始值設定為0  通過incr加減庫存,返回搶購成功
校驗當前使用者是否已經買過這個商品

需要儲存使用者的uid,將uid存入資料效率太低,存redis value方式資料太大,存布隆過濾器效能高且資料量小

未購買的使用者下單搶購商品

先判斷搶購的商品數量是否已經到達1萬件 # redis.get(skuid_booked) < 10000

如果未達到1萬件,還有剩餘商品,搶購成功。使用incr命令增加skuid_booked的值。 # redis.incr(skuid_booked)

由於redis是單執行緒,為了保證兩個任務的原子性,使用lua語言同時執行get命令和incr命令。

搶購成功使用訊息佇列非同步執行將資料存入資料庫中

系統分析 系統設計 需求分析的區別

一般的計算機應用開發都要進行需求分析,在 軟體工程 或 系統分析與設計 中都有涉及。那irp的需求分析與其有何不同呢?主要有以下幾個方面 1 分析的業務範圍不同。irp的需求分析是強調對全企業 企業的大部分或企業的主要部分進行分析,是全域性性的分析,需要全域性觀點 而軟體工程中的需求分析是一種區域性...

系統分析 系統設計 需求分析的區別

需求分析是軟體定義時期的最後乙個階段,它的基本任務是準確地回答 系統必須做什麼?這個問題。需求分析所要做的工作是深入描述軟體的功能和效能,確定軟體設計的限制和軟體同其它系統元素的介面細節,定義軟體的其它有效性需求。這都是從軟體的業務功能角度來講。系統分析 系統設計 物件導向設計uml實踐 分析模型不...

推薦系統 分析

收集使用者資訊的行為記錄模組 分析使用者喜好的模型分析模組 推薦演算法模組 推薦演算法 1.基於內容的推薦系統 content based recommendation 2.協同過濾推薦系統 collaborative filtering recommendation 3.混合推薦系統 hybrid...