悲觀鎖和樂觀鎖的了解

2021-10-02 07:22:32 字數 938 閱讀 7654

我們在一般的資料庫管理系統(dbms)中都會遇到併發控制,即當程式中可能出現併發的情況時,我們就需要通過一定的手段來保證在併發情況下資料的準確性,通過這種手段保證了當前使用者和其他使用者一起操作時,所得到的結果和他單獨操作時的結果是一樣的。

而實現併發控制的手段一般有兩種——樂觀併發控制和悲觀併發控制。

這樣我們就引出了樂觀鎖和悲觀鎖的概念:

樂觀鎖:樂觀鎖假設資料一般情況下不會造成衝突,所以在資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測,如果發現衝突了,則返回給使用者錯誤的資訊,讓使用者決定如何去做。

悲觀鎖:當我們要對乙個資料庫中的一條資料進行修改的時候,為了避免同時被其他人修改,最好的辦法就是直接對該資料進行加鎖以防止併發。

悲觀鎖的實現方式:

悲觀鎖的實現,往往依靠資料庫提供的鎖機制。在資料庫中,悲觀鎖的流程如下:

1.在對記錄進行修改前,先嘗試為該記錄加上排他鎖。

2.如果加鎖失敗,說明該記錄正在被修改,那麼當前查詢可能要等待或者丟擲異常。

3.如果成功加鎖,那麼就可以對記錄做修改,事務完成後就會解鎖了。

4.期間如果有其他對該記錄做修改或加排他鎖的操作,都會等待我們解鎖或直接丟擲異常。

樂觀鎖的實現方式:

樂觀鎖主要就是兩個步驟:衝突檢測和資料更新。

如何選擇樂觀鎖和悲觀鎖:

1.樂觀鎖並未真正加鎖,效率高。一旦鎖的粒度掌握不好,更新失敗的概率就會比較高,容易發生業務失敗。

2.悲觀鎖依賴資料庫鎖,效率低。更新失敗的概率比較低。

在實際生產環境裡邊,如果併發量不大且不允許髒讀,可以使用悲觀鎖解決併發問題;但如果系統的併發非常大的話,悲觀鎖定會帶來非常大的效能問題,所以我們就要選擇樂觀鎖定的方法.

悲觀鎖和樂觀鎖

1.悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...

悲觀鎖和樂觀鎖

前幾天有人問了我乙個問題,說如果資料庫某些操作不用事務,那麼又需要保持資料的一致性,那麼該用什麼方法替代事務。我就想到了悲觀鎖和樂觀鎖的思想,下面我解釋一下在資料庫中的悲觀鎖和樂觀鎖 1.悲觀鎖就是把資料庫的一些操作,放在事務當中,依賴資料庫的隔離級別,實現對資料修改的封鎖,這樣做資料一致性可以保持...

悲觀鎖和樂觀鎖

悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...