高併發下樂觀鎖的原理

1、首先有一張很簡單的表(goods)

id:主鍵用於用戶通過id查詢出商品

title:商品的標題

num:商品的數量

version:該字段的作用下面再體現


2、初始化一條數據

insert into goods values(1,"手機",100,1);


3、如果用戶購買商品,高併發的情況下,可能會有很多用戶讀到的商品數量爲100


4、應用場景:

用戶點擊購買,商品數量減一,這時候商品數量爲99,但是在併發的情況下,可能會出現多個用戶(10)購買後剩餘商品數量仍然爲99,本來庫存應該只剩下90(sql語句如下,每次更新都需要吧version++)

update  goods set num = 99,version = 2 where id = 1;


5、解決辦法,樂觀鎖的原理,樂觀鎖是在事務提交的時候進行驗證(這裏的實現是通過驗證版本號)


6、在執行更新商品數量的時候,把用戶讀到的version和數據庫中的version比較,如果提交的版本號高於讀取到的版本號,則可以更新,返回更新記錄條數,如果不一樣,表示當前的記錄不是數據庫中最新的記錄,或者表明該記錄已經被其他用戶修改過,則拋出異常,沒有更新的記錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章