七:Mysql的樂觀鎖與悲觀鎖機制

悲觀鎖:數據庫

    開始在執行前就會認爲數據可能出現競爭,直接加鎖,它是依靠數據庫的鎖來實現,可是缺點也很明顯:併發

若是悲觀鎖加鎖的時間過長,其餘用戶就會沒法訪問,大大下降了程序的併發性能,由於依靠數據庫的鎖來實現,因此數據庫的開銷也會比較大。因此有了樂觀鎖的實現性能

樂觀鎖:io

    相對於悲觀鎖來講,樂觀鎖會認爲數據開始不會發生競爭,只有在數據進行更新提交的時候,纔會對數據進行衝突檢查,若是衝突了就會返回衝突信息,那麼通常是如何實現的,主要有一下兩種:程序

1:經過版本號的方式控制時間戳

在查詢的時候查詢出舊的version,在更新的時候會對舊的version進行加1操做,在數據更新的時候,經過where條件進行判斷,版本號是否是和預期的一致,若是不是返回錯誤,若是是的話直接更新。數據

2:經過其餘字段,好比時間戳方式查詢

以時間戳的方式,和版本號差很少,不過就是時間戳是實時獲取的,更新的時候對於時間戳。時間

可是在樂觀鎖環境中可能出現用戶提交不成功一致提交的過程,也會下降系統的性能錯誤

相關文章
相關標籤/搜索