redis快取商品庫存減壓

2021-10-01 22:39:07 字數 2279 閱讀 9873

redis預減庫存:主要思路減少對資料庫的訪問,之前的減庫存,直接訪問資料庫,讀取庫存,當高併發請求到來的時候,大量的讀取資料有可能會導致資料庫的崩潰。

我們主要是通過這幾點來實現的:

1、系統初始化的時候,將商品庫存載入到redis 快取中儲存,並不是需要先請求一次才能快取

2、.收到請求的時候,現在redis中拿到該商品的庫存值,進行庫存預減,如果減完之後庫存不足,直接返回邏輯錯誤,減少對資料庫的訪問

3、將請求入隊,立即給前端返回乙個值,表示正在排隊中,然後進行秒殺邏輯,減庫存–>下訂單–>寫入秒殺訂單,成功了就返回成功,流程只要有乙個錯誤就返回失敗,前端同時輪詢

首先我們需要實現initializingbean介面,initializingbean介面為bean提供了初始化方法的方式,它就包括afterpropertiesset方法,凡是繼承該介面的類,在初始化bean的時候會執行該方法。

/**

* 系統初始化後就將所有商品庫存放入 快取

* */

public

void

afterpropertiesset()

throws exception

for(goodsvo goods : goodslist)

}

這就實現了我們系統啟動就把所有快取載入完畢,然後我們通過操作redis來實現預減庫存

然後當我們的併發量夠大,redis的壓力頁很大,然後我們可以通過map集合標記快取,減少redis伺服器的壓力

1、生成乙個map,並在初始化的時候,將所有商品的id為鍵,標記false 存入map中。

2、在預減庫存之前,從map中取標記,若標記為false,說明庫存,還有,

3、預減庫存,當遇到庫存不足的時候,將該商品的標記置為true,表示該商品的庫存不足。

這樣,下面的所有請求,將被攔截,無需訪問redis進行預減庫存。

//驗證path

boolean check = miaoshaservice.

checkpath

(user, goodsid, path);if

(!check)

//記憶體標記,從map取值判斷,減少redis訪問

boolean over = localovermap.

get(goodsid);if

(over)

//預減庫存

long stock = redisservice.

decr

(goodskey.getmiaoshagoodsstock,

""+goodsid)

;//10

if(stock <0)

//判斷是否已經秒殺到了

miaoshaorder order = orderservice.

getmiaoshaorderbyuseridgoodsid

(user.

getid()

, goodsid);if

(order != null)

//入隊

miaoshamessage mm =

newmiaoshamessage()

; mm.

setuser

(user)

; mm.

setgoodsid

(goodsid)

; sender.

sendmiaoshamessage

(mm)

;//返回0代表排隊中

return result.

success(0

);}redis給資料庫減輕壓力,利用map標記庫存給redis減輕壓力

end…

購物併發之商品庫存

購物 的併發,這個問題也算是老生常談的,很多大的電商 都對這塊的技術和業務,有了非常縝密的安排和設計。但是實際上在一些 小型的系統中,對於這塊內容的處理往往是缺乏規劃和經驗的。最近也是在專案的測試中出現了商品庫存的問題,因此通過review 也發現了商品訂單及支付這一塊對併發購買的處理是存在問題的。...

Redis快取型資料庫實現秒殺庫存加減

多執行緒併發下商品庫存遞減或者搶購商品數量累加,可以使用increment 方法 通常使用非同步的方式,前端 使用者搶購處理 快取 佇列 持久化,可以使用入佇列的方式來非同步持久化已搶購到商品的使用者資料 autowired private redistemplate redistemplate 已...

保點推出Wind RFID標籤,提公升商品庫存可見性

零售業eas及rfid解決方案提供商保點系統宣布推出wind rfid標籤,適用於化妝品等商品的可見性應用場景。該標籤採用impinj公司的monza r6 p rain rfid標籤晶元,專為服裝,電子,化妝品,藥品和珠寶等系列產品進行了優化。這些晶元支援零售商隱私保護,防損和品牌保護功能。win...