秒殺系統,庫存優化

2022-04-29 12:57:08 字數 1407 閱讀 7991

直接上**

1

public

class

redisshop 89

@autowired

10private

productservice productservice;

11@autowired

12private

stringredistemplate stringredistemplate;

13@autowired

14private

zookeeper zookeeper;

1516

/**17

* 將資料新增至redis快取

18*/

19public

void

init()

2728}29

30public

string soleproduct(long productid)

3738

//優化2:將redis快取中的資料-1,並返回減1後的值

39 long stock = stringredistemplate.opsforvalue().decrement(product_stock_key +productid);

40if (stock < 0)

5556

return "商品已售完";57}

5859

try catch

(exception ex)

7475

//優化4:修改zk的商品售完標記為false

76if (zookeeper.exists(zksoldproductpath, ture) != null

) 79

80return "創單失敗";81}

8283

return "";

8485 }

優化一共分為四個方面:

1.資料庫優化:對庫存的資料庫操作,直接在sql中進行-1,mysql資料庫自帶樂觀鎖。(缺點:併發在500-1000左右,最大併發連線數是16384。)

2.redis快取:將要對資料庫操作的資料放入redis快取中,先判斷快取中資料是否滿足,不行直接return,大大減少了資料庫壓力。(併發數能達到十萬左右,缺點:要考慮redis快取和mysql資料的一致性)

3.concorrecthashmap集合:執行緒同步的集合,庫存不足時向concorrecthashmap集合中新增乙個值,先檢查concorrecthashmap集合是否有值,再檢查stock。(解決了redis和mysql資料的一致性,缺點:jvm級別的執行緒同步,在多集群分布式服務中並不適用)

4.訊息中介軟體或zookeeper:庫存不足時向zookeeper中新增乙個值,客戶端進行監聽資料

秒殺 秒殺系統 優化之路

1 im系統,例如qq或者微博,每個人都讀自己的資料 好友列表 群列表 個人資訊 2 微博系統,每個人讀你關注的人的資料,乙個人讀多個人的資料 3 秒殺系統,庫存只有乙份,所有人會在集中的時間讀和寫這些資料,多個人讀乙個資料。例如 小公尺手機每週二的秒殺,可能手機只有1萬部,但瞬時進入的流量可能是幾...

秒殺系統防止庫存超賣

第一種 通過資料庫樂觀鎖實現 小型電商 update productstocks set realstock realstock where sku and realstock 0 根據受影響的行數判斷是否執行成功 大型網際網路不是這麼玩的 資料庫有瓶頸 第二種 使用redis 分布式鎖實現 var...

秒殺系統優化思路

一 秒殺業務為什麼這麼難做 秒殺系統,庫存只有乙份,所有人會在集中的時間讀和寫這些資料。例如 那我們怎麼優化秒殺業務呢?二 優化方向 以上的兩個場景要優化有兩個方向 三 常見秒殺架構 常見的秒殺架構基本是這樣的 四 各層優化細節 回顧一下我們12306剛出來那年搶票的場景,點選 查詢 按鈕之後,系統...