樂觀鎖說白了並非鎖,而只是版本號檢查而已數據庫
樂觀鎖說白了並非鎖,而只是版本號檢查而已併發
樂觀鎖說白了並非鎖,而只是版本號檢查而已mvc
先說樂觀鎖和悲觀鎖的機制:
1. 樂觀鎖是一種思想,具體實現是,表中有一個版本字段,第一次讀的時候,獲取到這個字段。處理完業務邏輯開始更新的時候,須要再次查看該字段的值是否和第一次的同樣。若是同樣更新,反之拒絕。之因此叫樂觀,由於這個模式沒有從數據庫加鎖。
2. 悲觀鎖是讀取的時候爲後面的更新加鎖,以後再來的讀操做都會等待。這種是數據庫鎖io
樂觀鎖優勢程序實現,不會存在死鎖等問題。他的適用場景也相對樂觀。阻止不了除了程序以外的數據庫操做。程序
悲觀鎖是數據庫實現,他阻止一切數據庫操做。數據
再來講更新數據丟失,全部的讀鎖都是爲了保持數據一致性。樂觀鎖若是有人在你以前更新了,你的更新應當是被拒絕的,可讓用戶重新操做。悲觀鎖則會等待前一個更新完成。這也是區別。具體業務具體分析通常咱們能夠從以下幾個方面來判斷:di
1.響應速度:若是須要很是高的響應速度,建議採用樂觀鎖方案,成功就執行,不成功就失敗,不須要等待其餘併發去釋放鎖co
2.衝突頻率:若是衝突頻率很是高,建議採用悲觀鎖,保證成功率,若是衝突頻率大,樂觀鎖會須要屢次重試才能成功,代價比較大cas
3.重試代價:若是重試代價大,建議採用悲觀鎖mv