成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么庫存扣減不需要加鎖?尤其是樂觀鎖?

開發(fā) 前端
沒加悲觀鎖是因為秒殺場景不適合用悲觀鎖(為什么秒殺不能用悲觀鎖或者分布式鎖來實現,詳見我的?面試寶典),那么為啥樂觀鎖都沒加呢?

在我的數藏項目中,庫存扣減的方法中(本文特指數據庫的扣減,不包含 Redis 層),我們全程是沒有加鎖的,甚至樂觀鎖都沒加。

沒加悲觀鎖是因為秒殺場景不適合用悲觀鎖(為什么秒殺不能用悲觀鎖或者分布式鎖來實現,詳見我的面試寶典),那么為啥樂觀鎖都沒加呢?這個是我們的庫存預扣減的 SQL:

圖片圖片

大家可以先忽略 SQL 中`/*+ COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 */`部分內容,這是利用了阿里云 DMS 的 Inventory Hint 的機制抗高并發(fā)的實現。具體可以到我的項目課程中學習。

如上的 SQL 中,我們只做了數量的扣減,以及數量的上限的控制。但是沒有通過 lock_version 做樂觀鎖的版本控制。

雖然我們用了MybatisPlus。也用到了他的@Version 注解,但是我們自己寫的 SQL 的這種方式,MyBatisPlus 也不會主動幫我們加樂觀鎖的控制:

圖片圖片

那就是說我們這里沒有做加鎖,為什么呢?

如果你知道樂觀鎖和悲觀鎖的區(qū)別,那么就會知道,樂觀鎖因為比較樂觀,所以一般是先做業(yè)務邏輯操作,比如參數處理,內存中進行模型組裝調整,然后再去更新數據庫。悲觀鎖因為比較悲觀,所以會先嘗試加鎖,然后再去做業(yè)務邏輯操作。

也就是說,樂觀鎖是先干活,后加鎖。悲觀鎖是先加鎖,再干活。樂觀鎖適合用在并發(fā)沖突不高的場景中。

而我們的這個庫存扣減這里,其實并發(fā)沖突還挺高的,如果這里用了樂觀鎖,那么就會有大量的失敗。

舉個例子,100個線程同時來查詢庫存,得到的 lock_version = 1,然后同時去更新庫存,都要求當前的 lock_version = 1,這就會導致99個線程都失敗,那么就會導致整體失敗,如果事務中有其他操作,就要回滾。

庫存扣減的時候,我們的目的肯定是讓多個線程都扣減成功,并且不扣錯就行了。

如果你的 SQL 是這樣的:

UPDATE collection


SET saleable_inventory = #{saleableInventory}


WHERE id = #{id}

也就是說這個變更后的saleableInventory是你自己算好的,給到 SQL 去執(zhí)行的,那么就必須要加鎖來避免并發(fā)的時候計算出錯,但是我們通過在 SQL 中扣減不會有任何并發(fā)導致出錯的問題。

而如果這里不加樂觀鎖,只通過庫存扣減,以及庫存不能小于0來做控制,那么只需要他們各自搶鎖然后按順序扣減就行了,反正每次庫存都是在前面的結果上依次扣減的:

SET saleable_inventory = saleable_inventory - #{quantity}

所以,這里我們只需要保證不會超賣就行了,剩下的并發(fā)問題 update 過程中的鎖會幫我們解決的。

本文的技術方案來自于我出的數藏項目實戰(zhàn)課,里面還有很多類似的干貨內容。

責任編輯:武曉燕 來源: Hollis
相關推薦

2014-01-17 13:09:48

Linux碎片整理

2021-07-06 11:10:22

LinuxmacOSWindows

2021-05-07 15:18:26

比特幣禁令監(jiān)管

2019-07-15 08:00:00

AI人工智能

2012-06-12 09:46:21

Linux碎片整理

2021-04-27 08:52:55

Linux MacOS碎片

2020-05-07 10:09:30

MAC地址網絡協議網絡

2014-09-24 09:31:31

Dockersshd

2021-07-02 09:00:00

自動駕駛特斯拉技術

2022-06-02 16:04:02

DeFi金融比特幣

2017-03-13 13:54:40

戴爾

2015-07-29 09:42:09

工程師全棧工程師

2022-03-22 13:39:10

框架react面試

2012-08-23 09:50:07

測試測試人員軟件測試

2009-11-23 12:45:22

2019-02-25 08:57:22

5G6G網絡

2015-08-20 10:56:19

算法界面開發(fā)

2013-12-02 09:43:29

字符串編程

2024-02-22 09:00:00

LogitMat數據集算法

2015-09-30 09:57:53

天分熱情工程師
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚州精品天堂中文字幕 | 欧美一区二区三区视频在线观看 | 在线观看视频中文字幕 | 亚洲欧美日韩一区二区 | 日韩欧美专区 | 91香蕉| 国产日韩精品一区 | 中文字幕一区二区三区在线视频 | 中文字幕在线视频精品 | 精品国产乱码久久久久久丨区2区 | 欧美videosex性极品hd | 中国黄色毛片视频 | 欧美精品一二区 | 久久噜噜噜精品国产亚洲综合 | 三级在线视频 | 9999国产精品欧美久久久久久 | 亚洲一区视频在线 | 日韩在线一区二区三区 | 国产精品视频一区二区三区 | 亚洲精品视频观看 | 一级做受毛片免费大片 | 一区二区国产在线 | 精品视频一区二区在线观看 | 成人欧美 | 毛片a | 国产精品久久久久一区二区三区 | 亚洲综合久久精品 | 亚洲成人动漫在线观看 | 亚洲欧美综合精品久久成人 | 国产精品欧美一区二区三区不卡 | 欧美大片一区 | 91精品久久久久久久久99蜜臂 | 一级毛片视频 | 做a的各种视频 | 国产精品亚洲第一区在线暖暖韩国 | 精品国产一区二区三区免费 | 欧美日韩电影一区 | 国产精品一区二区三区四区 | 999久久久久久久 | 天堂久久久久久久 | 在线中文字幕国产 |