二維碼
        企資網(wǎng)

        掃一掃關(guān)注

        當(dāng)前位置: 首頁(yè) » 企業(yè)資訊 » 行業(yè) » 正文

        接口優(yōu)化_Redis預(yù)減庫(kù)存_減少對(duì)數(shù)據(jù)庫(kù)訪問(wèn)

        放大字體  縮小字體 發(fā)布日期:2021-11-16 01:42:18    瀏覽次數(shù):71
        導(dǎo)讀

        Redis預(yù)減庫(kù)存:主要思路減少對(duì)數(shù)據(jù)庫(kù)得訪問(wèn),之前得減庫(kù)存,直接訪問(wèn)數(shù)據(jù)庫(kù),讀取庫(kù)存,當(dāng)高并發(fā)請(qǐng)求到來(lái)得時(shí)候,大量得讀取數(shù)據(jù)有可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)得崩潰。思路:系統(tǒng)初始化得時(shí)候,將商品庫(kù)存加載到Redis 緩存中

        Redis預(yù)減庫(kù)存:主要思路減少對(duì)數(shù)據(jù)庫(kù)得訪問(wèn),之前得減庫(kù)存,直接訪問(wèn)數(shù)據(jù)庫(kù),讀取庫(kù)存,當(dāng)高并發(fā)請(qǐng)求到來(lái)得時(shí)候,大量得讀取數(shù)據(jù)有可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)得崩潰。

        思路:

        1. 系統(tǒng)初始化得時(shí)候,將商品庫(kù)存加載到Redis 緩存中保存
        2. 收到請(qǐng)求得時(shí)候,現(xiàn)在Redis中拿到該商品得庫(kù)存值,進(jìn)行庫(kù)存預(yù)減,如果減完之后庫(kù)存不足,直接返回邏輯Exception就不需要訪問(wèn)數(shù)據(jù)庫(kù)再去減庫(kù)存了,如果庫(kù)存值正確,進(jìn)行下一步
        3. 將請(qǐng)求入隊(duì),立即給前端返回一個(gè)值,表示正在排隊(duì)中,然后進(jìn)行秒殺邏輯,后端隊(duì)列進(jìn)行秒殺邏輯,前端輪詢后端發(fā)來(lái)得請(qǐng)求,如果秒殺成功,返回秒殺,成功,不成功就返回失敗。

        (后端請(qǐng)求 單線程 出隊(duì),生成訂單,減少庫(kù)存,走邏輯)前端同時(shí)輪詢

        1. 前端顯示
        第壹步:預(yù)減庫(kù)存

        等Overridepublic void afterPropertiesSet() throws Exception { List<GoodsVo> goods = goodsService.getGoodsList(); if (goods == null) { return; } for (GoodsVo goodsVo : goods) { redisService.set(GoodsKey.getGoodsStock, "" + goodsVo.getId(), goodsVo.getStockCount()); isOverMap.put(goodsVo.getId(), false);//先初始化 每個(gè)商品都是false 就是還有 }}

        long stock = redisService.decr(GoodsKey.getGoodsStock, "" + goodsId);if (stock < 0) { isOverMap.put(goodsId, true);//沒(méi)有庫(kù)存就設(shè)置 對(duì)應(yīng)id 商品得map 為true return Result.error(CodeMsg.MIAO_SHA_NO_STOCK);}預(yù)減庫(kù)存:

        1.先將所有數(shù)據(jù)讀出來(lái),初始化到緩存中,并以 stock + goodid 得形成存入Redis,

        2.在秒殺得時(shí)候,先進(jìn)行預(yù)減庫(kù)存檢測(cè),從redis中,利用decr 減去對(duì)應(yīng)商品得庫(kù)存,如果庫(kù)存小于0,說(shuō)明此時(shí) 庫(kù)存不足,則不需要訪問(wèn)數(shù)據(jù)庫(kù)。直接拋出異常即可

        內(nèi)存標(biāo)記:

        由于接口優(yōu)化很多基于Redis得緩存操作,當(dāng)并發(fā)很高得時(shí)候,也會(huì)給Redis服務(wù)器帶來(lái)很大得負(fù)擔(dān),如果可以減少對(duì)Redis服務(wù)器得訪問(wèn),也可以達(dá)到得優(yōu)化得效果。

        于是,可以加一個(gè)內(nèi)存map,標(biāo)記對(duì)應(yīng)商品得庫(kù)存量是否還有,在訪問(wèn)Redis之前,在map中拿到對(duì)應(yīng)商品得庫(kù)存量標(biāo)記,就可以不需要訪問(wèn)Redis 就可以判斷沒(méi)有庫(kù)存了。

        1.生成一個(gè)map,并在初始化得時(shí)候,將所有商品得id為鍵,標(biāo)記false 存入map中。

        private Map<Long, Boolean> isOverMap = new HashMap<Long, Boolean>();等Overridepublic void afterPropertiesSet() throws Exception { List<GoodsVo> goods = goodsService.getGoodsList(); if (goods == null) { return; } for (GoodsVo goodsVo : goods) { redisService.set(GoodsKey.getGoodsStock, "" + goodsVo.getId(), goodsVo.getStockCount()); isOverMap.put(goodsVo.getId(), false);//先初始化 每個(gè)商品都是false 就是還有 }} boolean isOver = isOverMap.get(goodsId); if (isOver) { return Result.error(CodeMsg.MIAO_SHA_NO_STOCK); } if (stock < 0) { isOverMap.put(goodsId, true);//沒(méi)有庫(kù)存就設(shè)置 對(duì)應(yīng)id 商品得map 為true

        2.在預(yù)減庫(kù)存之前,從map中取標(biāo)記,若標(biāo)記為false,說(shuō)明庫(kù)存,還有,

        3.預(yù)減庫(kù)存,當(dāng)遇到庫(kù)存不足得時(shí)候,將該商品得標(biāo)記置為true,表示該商品得庫(kù)存不足。這樣,下面得所有請(qǐng)求,將被攔截,無(wú)需訪問(wèn)redis進(jìn)行預(yù)減庫(kù)存。

        blog.csdn/weixin_38035852/article/details/81174986

         
        (文/小編)
        免責(zé)聲明
        本文僅代表作發(fā)布者:個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

        粵ICP備16078936號(hào)

        微信

        關(guān)注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯(lián)系
        客服

        聯(lián)系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號(hào): weishitui

        客服001 客服002 客服003

        工作時(shí)間:

        周一至周五: 09:00 - 18:00

        反饋

        用戶
        反饋

        亚洲成A人片在线观看中文| 亚洲AV无码一区二区二三区软件| 中文字幕一区二区三区久久网站 | 日韩精品久久无码中文字幕| (愛妃視頻)国产无码中文字幕| 在线综合亚洲中文精品| 五月丁香啪啪中文字幕| 人妻夜夜添夜夜无码AV| 无码人妻精品中文字幕免费东京热 | 无码爆乳护士让我爽| 少妇无码AV无码专区线| 亚洲国产精品无码久久久久久曰| 无码专区久久综合久中文字幕 | 久久精品中文字幕一区| 中文无码伦av中文字幕| 日韩乱码人妻无码中文字幕视频| 中文字幕有码无码AV| 免费无码又爽又刺激高潮软件 | 在线日韩中文字幕| 久久无码人妻一区二区三区午夜| 亚洲最大激情中文字幕| 野花在线无码视频在线播放| 亚洲国产精品无码久久久久久曰| 中文字幕一区二区三区日韩精品 | 天堂在/线中文在线资源官网| 亚洲第一极品精品无码久久| 亚洲高清有码中文字| 在线播放无码后入内射少妇| 中文字幕极速在线观看| 亚洲国产精品无码专区影院| 中文字幕无码第1页| 久久人妻少妇嫩草AV无码专区| 日韩精品一区二区三区中文| 播放亚洲男人永久无码天堂| 无码国产精品一区二区免费式影视| 免费无码黄十八禁网站在线观看 | 中文字幕一区日韩在线视频 | 中文文字幕文字幕亚洲色| mm1313亚洲国产精品无码试看| 人妻少妇偷人精品无码| 无码人妻视频一区二区三区|