那麼為了使用樂觀鎖,我們首先修改t_goods表,增加乙個version欄位,資料預設version值為1。
update t_goods set count = count -1 , version = version + 1 where good_id=# and version = 1
根據version版本,也就是在操作庫存前先獲取當前商品的version版本號,然後操作的時候帶上此version號。我們梳理下,我們第一次操作庫存時,得到version為1,呼叫庫存服務version變成了2;但返回給訂單服務出現了問題,訂單服務又一次發起呼叫庫存服務,當訂單服務傳如的version還是1,再執行上面的sql語句時,就不會執行;因為version已經變為2了,where條件就不成立。這樣就保證了不管呼叫幾次,只會真正的處理一次。
樂觀鎖實現介面冪等性 支援API冪等操作
背景 平台有部分 api 需要保證介面冪等性,防止業務頻繁刷 api 造成資源浪費,或者不小心重發訊息影響業務。名詞解釋 介面的冪等,指的是乙個操作重複執行n次得到的結果 與執行一次是相等的。比如在 http 協議中,get請求,會得到同樣的資料。但是對於 post 和 patch 的介面,每次請求...
冪等性解決方案
1 token方案,前端請求時服務端生成乙個token給前端,在這個請求沒處理完時這個token永遠生效,在這個過程中如果前端重複請求,服務端判斷這個token,如果發現是同乙個則不予理睬,請求處理完畢後釋放token 2 利用mysql行鎖 前端進入某個頁面自己生成乙個唯一標識,給服務端傳過來,服...
原子性 冪等性
原子性 如果這個操作所處的層 layer 的更高層不能發現其內部實現與結構,那麼這個操作是乙個原子 atomic 操作。原子操作可以是乙個步驟,也可以是多個操作步驟,但是其順序不可以被打亂,也不可以被切割而只執行其中的一部分。將整個操作視作乙個整體是原子性的核心特徵。冪等性 再簡單一點說,在乙個業務...