那么為了使用樂觀鎖,我們首先修改t_goods表,增加一個version字段,數據默認version值為1。
樂觀鎖方案
借鑒數據庫的樂觀鎖機制,如:
update t_goods set count = count -1 , version = version + 1 where good_id=#{id} and version = 1
根據version版本,也就是在操作庫存前先獲取當前商品的version版本號,然后操作的時候帶上此version號。我們梳理下,我們第一次操作庫存時,得到version為1,調用庫存服務version變成了2;但返回給訂單服務出現了問題,訂單服務又一次發起調用庫存服務,當訂單服務傳如的version還是1,再執行上面的sql語句時,就不會執行;因為version已經變為2了,where條件就不成立。這樣就保證了不管調用幾次,只會真正的處理一次。