二維碼
        企資網

        掃一掃關注

        當前位置: 首頁 » 企資頭條 » 頭條 » 正文

        接口優化_Redis預減庫存_減少對數據庫訪問

        放大字體  縮小字體 發布日期:2021-11-16 01:42:18    瀏覽次數:62
        導讀

        Redis預減庫存:主要思路減少對數據庫得訪問,之前得減庫存,直接訪問數據庫,讀取庫存,當高并發請求到來得時候,大量得讀取數據有可能會導致數據庫得崩潰。思路:系統初始化得時候,將商品庫存加載到Redis 緩存中

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

        思路:

        1. 系統初始化得時候,將商品庫存加載到Redis 緩存中保存
        2. 收到請求得時候,現在Redis中拿到該商品得庫存值,進行庫存預減,如果減完之后庫存不足,直接返回邏輯Exception就不需要訪問數據庫再去減庫存了,如果庫存值正確,進行下一步
        3. 將請求入隊,立即給前端返回一個值,表示正在排隊中,然后進行秒殺邏輯,后端隊列進行秒殺邏輯,前端輪詢后端發來得請求,如果秒殺成功,返回秒殺,成功,不成功就返回失敗。

        (后端請求 單線程 出隊,生成訂單,減少庫存,走邏輯)前端同時輪詢

        1. 前端顯示
        第壹步:預減庫存

        等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);//先初始化 每個商品都是false 就是還有 }}

        long stock = redisService.decr(GoodsKey.getGoodsStock, "" + goodsId);if (stock < 0) { isOverMap.put(goodsId, true);//沒有庫存就設置 對應id 商品得map 為true return Result.error(CodeMsg.MIAO_SHA_NO_STOCK);}預減庫存:

        1.先將所有數據讀出來,初始化到緩存中,并以 stock + goodid 得形成存入Redis,

        2.在秒殺得時候,先進行預減庫存檢測,從redis中,利用decr 減去對應商品得庫存,如果庫存小于0,說明此時 庫存不足,則不需要訪問數據庫。直接拋出異常即可

        內存標記:

        由于接口優化很多基于Redis得緩存操作,當并發很高得時候,也會給Redis服務器帶來很大得負擔,如果可以減少對Redis服務器得訪問,也可以達到得優化得效果。

        于是,可以加一個內存map,標記對應商品得庫存量是否還有,在訪問Redis之前,在map中拿到對應商品得庫存量標記,就可以不需要訪問Redis 就可以判斷沒有庫存了。

        1.生成一個map,并在初始化得時候,將所有商品得id為鍵,標記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);//先初始化 每個商品都是false 就是還有 }} boolean isOver = isOverMap.get(goodsId); if (isOver) { return Result.error(CodeMsg.MIAO_SHA_NO_STOCK); } if (stock < 0) { isOverMap.put(goodsId, true);//沒有庫存就設置 對應id 商品得map 為true

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

        3.預減庫存,當遇到庫存不足得時候,將該商品得標記置為true,表示該商品得庫存不足。這樣,下面得所有請求,將被攔截,無需訪問redis進行預減庫存。

        近日:blog.csdn感謝原創分享者/weixin_38035852/article/details/81174986

         
        (文/小編)
        打賞
        免責聲明
        本文為小編推薦作品?作者: 小編。歡迎轉載,轉載請注明原文出處:http://m.sneakeraddict.net/news/show-215855.html 。本文僅代表作者個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,作者需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2023 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

        粵ICP備16078936號

        微信

        關注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯系
        客服

        聯系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號: weishitui

        客服001 客服002 客服003

        工作時間:

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

        反饋

        用戶
        反饋

        亚洲一区中文字幕久久| 亚洲啪啪AV无码片| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 日韩亚洲欧美中文在线| 久久青青草原亚洲av无码app| 国产精品无码素人福利不卡| 中文字幕在线观看| 久久国产精品无码一区二区三区| 亚洲中文字幕无码久久精品1| 亚洲成AV人片在线播放无码| 一本大道久久东京热无码AV| 一本大道东京热无码一区| 久久久久久无码国产精品中文字幕| 最近免费字幕中文大全视频| 日韩国产精品无码一区二区三区| 娇小性色xxxxx中文| 无码AV片在线观看免费| 最好看的中文字幕最经典的中文字幕视频 | 无码人妻少妇伦在线电影| 日韩欧美一区二区三区中文精品| 免费无码毛片一区二区APP| 国产中文字幕视频| 国产50部艳色禁片无码| 特级做A爰片毛片免费看无码 | 日韩乱码人妻无码中文字幕视频| 国产又爽又黄无码无遮挡在线观看 | 精品人妻无码区二区三区| 日本阿v视频高清在线中文| 亚洲热妇无码AV在线播放| 中文字幕在线观看| 亚洲人成无码久久电影网站| 久久久久无码精品国产| 中文字幕乱码人妻综合二区三区| 中文字幕乱码人在线视频1区| 国产成人亚洲综合无码精品| 精品国产V无码大片在线看| 久久精品中文字幕无码绿巨人| 日韩乱码人妻无码中文视频| 无码av最新无码av专区| 亚洲av无码乱码国产精品 | 激情无码人妻又粗又大中国人|