日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

電商并發減庫存設計,如何做到不超賣

來源: 責編: 時間:2024-07-12 17:24:25 695觀看
導讀前言高并發的秒殺活動中,通過查詢數據庫判斷是否還有庫存,然后對庫存字段進行增減,極易出現庫存超出或者庫存為負的情況,一般來說有3中解決辦法(數據庫表加鎖,memche緩存,redis隊列);我們這里使用redis來解決問題1、思路:1)觸發

前言

高并發的秒殺活動中,通過查詢數據庫判斷是否還有庫存,然后對庫存字段進行增減,極易出現庫存超出或者庫存為負的情況,一般來說有3中解決辦法(數據庫表加鎖,memche緩存,redis隊列);qPG28資訊網——每日最新資訊28at.com

我們這里使用redis來解決問題

1、思路:

1)觸發開始開團的同時,把庫存數量更新到id對應的隊列上去(定時更新,或者手動更新)qPG28資訊網——每日最新資訊28at.com

2)用戶請求接口,如果隊列長度>0,移除一個隊列記錄,同時對數據庫進行相應操作qPG28資訊網——每日最新資訊28at.com

3)如果隊列長度<=0,攔截用戶的訪問,返回‘無庫存’qPG28資訊網——每日最新資訊28at.com

2、重點設計在數據庫層面

2張表:qPG28資訊網——每日最新資訊28at.com

第一張:判重表(buy_record),該用戶有沒秒殺過該商品qPG28資訊網——每日最新資訊28at.com

字段: id, uid, goods_id, addtimeqPG28資訊網——每日最新資訊28at.com

第二張表:商品表 goodsqPG28資訊網——每日最新資訊28at.com

字段:goods_id goods_numqPG28資訊網——每日最新資訊28at.com

方案一

start transaction;  select id from buy_record where uid=$uid and goods_id=$goods_id;  if(結果不為空)      拋異常,回滾。  insert into buy_record。。。  if(受影響行數<=0)          拋異常,回滾。。。    select goods_num from goods where goods_id=$good_id;  if(庫存<=0)          拋異常,回滾。。。    update goods set goods_num=goods_num-1 where goods_id=$goods_id;  if(受影響行數<=0)      該方法在高并發下幾乎必然導致超賣。當庫存為1的時候剛好多個用戶同時    select goods_num from goods where goods_id=$good_id;此時庫存剛好大于0,做update操作的時候必然減到小于0.  同時上面進行是否秒殺過的判重同樣會出現類似問題

方案二

start transaction;    select id from buy_record where uid=$uid and goods_id=$goods_id          for       update        ;  if(結果不為空)    拋異常,回滾。insert into buy_record。。。if(受影響行數<=0)    拋異常,回滾。。。    select goods_num from goods where goods_id=$good_id    for update    ;  if(庫存<=0)    拋異常,回滾。。。    update goods set goods_num=goods_num-1     where goods_id=$goods_id    ;  if(受影響行數<=0)    拋異常,回滾。。。
該方法有效的防止了超賣,但是在每次select的時候加上了排它鎖,每次select操作都會被堵塞    ,并發性能大大降低。

方案三

對(uid,goods_id)加唯一索引!!        start transaction;      insert into buy_record。。。    if(唯一索引報錯?)      拋異常,已經秒過了,回滾。。。            update goods set goods_num=goods_num-1                         where goods_id=$goods_id          and                goods_num>0            ;        if(受影響行數<=0)      拋異常,商品秒完了,回滾。。。

該方法完美的解決了超賣與select排它鎖導致的并發低的問題,并且4個sql縮減成2個sql語句。極大提升性能。qPG28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-100723-0.html電商并發減庫存設計,如何做到不超賣

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: SpringBoot強大的分布式鎖組件Lock4j,支持多種實現

下一篇: React 支持 Form Action 是在作妖?不,它是一種重磅回歸

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • 量化指標是與非:挽救被量化指標扼殺的技術團隊

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術總監劉新翠在WOT2023大會上的主題分享,更多精彩內容及現場PPT,請關注51CTO技術棧公眾號,發消息【WOT2023PPT】即可直接領取
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 2299元起!iQOO Pad開啟預售:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其搭載了天璣
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
  • Meta盲目擴張致超萬人被裁,重金押注元宇宙而前景未明

    圖片來源:圖蟲創意日前,Meta創始人兼CEO 馬克&middot;扎克伯發布公開信,宣布Meta計劃裁員超11000人,占其員工總數13%。他公開承認了自己的預判失誤:&ldquo;不僅
Top 主站蜘蛛池模板: 兴国县| 崇仁县| 临桂县| 苗栗县| 台前县| 老河口市| 项城市| 海兴县| 米易县| 吉林市| 永登县| 镇平县| 梅河口市| 东兰县| 清苑县| 东乡县| 文山县| 彭阳县| 化州市| 景洪市| 西丰县| 睢宁县| 无棣县| 醴陵市| 郎溪县| 开封县| 搜索| 壶关县| 永登县| 韶关市| 四平市| 琼结县| 武宁县| 密山市| 香格里拉县| 西城区| 井冈山市| 勐海县| 丰宁| 民和| 新化县|