樂觀鎖和悲觀鎖的詳細理解

樂觀鎖說白了並非鎖,而只是版本號檢查而已數據庫

樂觀鎖說白了並非鎖,而只是版本號檢查而已併發

樂觀鎖說白了並非鎖,而只是版本號檢查而已mvc

先說樂觀鎖和悲觀鎖的機制:
1. 樂觀鎖是一種思想,具體實現是,表中有一個版本字段,第一次讀的時候,獲取到這個字段。處理完業務邏輯開始更新的時候,須要再次查看該字段的值是否和第一次的同樣。若是同樣更新,反之拒絕。之因此叫樂觀,由於這個模式沒有從數據庫加鎖。
2. 悲觀鎖是讀取的時候爲後面的更新加鎖,以後再來的讀操做都會等待。這種是數據庫鎖io

樂觀鎖優勢程序實現,不會存在死鎖等問題。他的適用場景也相對樂觀。阻止不了除了程序以外的數據庫操做。程序

悲觀鎖是數據庫實現,他阻止一切數據庫操做。數據

再來講更新數據丟失,全部的讀鎖都是爲了保持數據一致性。樂觀鎖若是有人在你以前更新了,你的更新應當是被拒絕的,可讓用戶重新操做。悲觀鎖則會等待前一個更新完成。這也是區別。具體業務具體分析


做者:李鵬飛
連接:https://www.zhihu.com/question/29420056/answer/73367676
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
 

通常咱們能夠從以下幾個方面來判斷:di

1.響應速度:若是須要很是高的響應速度,建議採用樂觀鎖方案,成功就執行,不成功就失敗,不須要等待其餘併發去釋放鎖co

2.衝突頻率:若是衝突頻率很是高,建議採用悲觀鎖,保證成功率,若是衝突頻率大,樂觀鎖會須要屢次重試才能成功,代價比較大cas

3.重試代價:若是重試代價大,建議採用悲觀鎖mv



做者:iseeyou
連接:https://www.zhihu.com/question/29420056/answer/148053110
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
 
 
樂觀鎖的實現:cas,mvcc 參考下這些名詞-_-
 
 
想知道爲什麼Redis用樂觀鎖,而MySQL數據庫卻沒有用。樂觀鎖說白了並非鎖,而只是版本號檢查而已
樂觀鎖說白了並非鎖,而只是版本號檢查而已
樂觀鎖說白了並非鎖,而只是版本號檢查而已
樂觀鎖說白了並非鎖,而只是版本號檢查而已
相關文章
相關標籤/搜索