二維碼
        企資網(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

        反饋

        用戶
        反饋

        国产成人无码AV麻豆| 中文字幕一区二区三区在线观看| 亚洲av无码成人精品区在线播放| 久热中文字幕无码视频| 中文字幕乱码人妻无码久久| 亚洲av无码专区在线观看素人| 日韩人妻无码一区二区三区| 久久久久亚洲AV片无码下载蜜桃| 日韩精品无码一区二区中文字幕 | 欧美乱人伦中文字幕在线| AV色欲无码人妻中文字幕| 精品无码国产污污污免费网站国产 | 日韩av无码久久精品免费| 久久国产高清字幕中文| 亚洲A∨无码无在线观看| 色婷婷综合久久久久中文| 国产白丝无码免费视频| 乱人伦人妻中文字幕无码| 国产精品亚洲专区无码WEB| 波多野结衣AV无码久久一区| 无码人妻一区二区三区免费视频 | 久久伊人亚洲AV无码网站| 少妇无码AV无码一区| 久久精品中文闷骚内射| av无码播放一级毛片免费野外| 13小箩利洗澡无码视频网站免费| 99高清中文字幕在线| 日韩专区无码人妻| 色综合久久无码中文字幕| 少妇无码AV无码一区| 最近2019中文字幕电影1| 超清中文乱码字幕在线观看| 久久国产亚洲精品无码 | 久久精品无码一区二区三区日韩 | 色噜噜狠狠成人中文综合| AAA级久久久精品无码片| 无套内射在线无码播放| 国产aⅴ无码专区亚洲av麻豆| 玖玖资源站中文字幕在线| 日韩乱码人妻无码系列中文字幕| 亚洲伊人成无码综合网|