庫存設計:
乙個商品主表 ------------
100條庫存記錄,每各庫存記錄49個庫存;額外一條保障庫存記錄有100個庫存100個 一共101條庫存記錄;共5000庫存
如何實現下單功能:
1 如何實現減庫存
2 如何確保快速獲取到庫存個數大於0的庫存記錄並實現減庫存
3 如何保障5000庫存均被消費
寫請求直接到庫 讀請求走快取,實時性延遲處理 新增商品確保每個stock有一定的數量,比如下限100,如果小於100可能衍生成為普通庫存記錄【1條記錄】
market
id product_id stock label
1 12 0
1 22 0
1 32 0
1 0 0
1 0 0
1 1 0
1 12 0
1 45 0
1 21 1 // 表示優先順序較低的庫存,防止併發都到了某一條庫存記錄,導致存在庫存但減庫存失敗
如何減庫存?
減庫存領域幹減庫存這個事情,如何設計?
data = select * from market where stock > 0 and label = 0 and product_id =1 limit 0,1
if data!=null
success = update market set stock = stock - 1 where stock >= 1 and id = ?
if success
return
else
ok = update market set stock = stock - 1 where stock >= 1 and label = 1 and id = ?
if ok:
return
else:
throw new exception("庫存不足")
else:
ok = update market set stock = stock - 1 where stock >= 1 and label = 1 and id = ?
if ok:
return
else:
throw new exception("庫存不足")
下單成功後,將請求減少命令非同步發給redis 【造成現象,使用者看到庫存下單提示庫存沒有】
微信紅包系統設計 優化
中小 分享到 qq空間 人人網豆瓣網 開心網更多 0講師 jeri 核心功能 目標 搖 搖的流暢 快 搶的要快 爽 拆的爽 穩 能分享出去 系統難點 1.中國運營商網路環境複雜,覆蓋面廣,春節期間網路吃緊,容易出現網路故障 2.在尖峰搖時如何避免服務雪崩 3.在服務資源有限時,如何提供柔性服務 4....
微信紅包的設計實現
拆紅包高併發讀 併發寫網路流量峰值 對賬降級 故障恢復 拆紅包有預拆包和實時拆包2種策略 預拆包的策略在發紅包時將金額m的紅包拆分成n份,將分配好的結果放入記憶體佇列或者cache,通過incr操作在使用者搶紅包時分配預算好的紅包slot,預算的策略可以避免對共享資源的操作,減少了鎖競爭,服務本身是...
微信搶紅包架構設計
實時性 為什麼明明搶到紅包,點開後發現沒有?答 2014年的紅包一點開就知道金額,分兩次操作,先搶到金額,然後再轉賬。2015年的紅包的拆和搶是分離的,需要點兩次,因此會出現搶到紅包了,但點開後告知紅包已經被領完的狀況。進入到第乙個頁面不代表搶到,只表示當時紅包還有。分配 紅包裡的金額怎麼算?為什麼...