秒殺設計思路與實現

2021-09-27 04:24:20 字數 1056 閱讀 5037

前言實現

有彩蛋哦!!!

1.控制每個人每個商品 只能10s請求一次 (可根據業務酌情考慮,也可不加這條限制)

2.如果此人已經秒殺了該商品(查詢該人該秒殺商品的訂單),不允許再次秒殺

3.檢查記憶體中商品是否售完,如果售完返回商品售馨

4.將redis中該商品個數 -

1 如果返回的值小於0 表示商品已經售馨,將記憶體標記設為售馨

5.如果4返回值大於等於0 表示秒殺到改商品,建立秒殺訂單

官網介紹將制定key的值減1,返回減1後的值,當然也有很多異常具體看官網

decr

string goodkey =

(miaoshakey, goodid)

;localdatetime begintime = ms_begin_time.

get(goodid)

;localdatetime now = localdatetime.

now();

檢查是否已經開始(根據業務考慮,可去掉)

if(now.

isafter

(begintime)

)檢查是否請求過於頻繁 if(

checkusermsrequest()

)檢查是否已經秒殺到if(

checkusermsorder()

)檢查記憶體標記中是否已經售馨

boolean goodsold = ms_sold_out.

get(goodid);if

(goodsold)

檢查redis中是否已經售馨

long stock = redistemplate.

opsforvalue()

.decrement

(goodkey);if

(stock <0)

//到這裡說明已經秒殺到商品 後面處理訂單 通知其他服務

msservice.

handleorder

(userid, goodid)

;

秒殺系統的設計與實現

redis 高併發鎖機制 如何限制乙個ip使用搶購軟體?秒殺的超賣問題?將存庫從mysql前移到redis中,所有的寫操作放到記憶體中,由於redis中不存在鎖故不會出現互相等待,並且由於redis的寫效能和讀效能都遠高於mysql,這就解決了高併發下的效能問題。然後通過佇列等非同步手段,將變化的資...

秒殺系統思路

隨著電商的發展,秒殺系統已經發展成為電商必不可少的組成部分,如小公尺手機的秒殺,12306的搶票,這些系統的共同特點都是 庫存只有乙份,瞬時流量非常大,所有人會在集中的時間讀和寫這些資料,多個人讀乙個資料 讀寫衝突,鎖非常嚴重,這是秒殺業務難的地方。那我們怎麼構建秒殺業務的架構呢?構建架構需要總體做...

秒殺專案思路整理

因為秒殺的商品需要存入redis中,所以需要提前將商品資訊存入redis,而不是初次有使用者訪問時在去查redis。思路 當專案啟動時,執行查詢秒殺資訊業務。這裡用到了 postconstruct註解,其是隨著servlet生命週期進行的。參考文章1 postconstruct public voi...