樂觀鎖和悲觀鎖簡介

樂觀鎖和悲觀鎖是併發控制主要採用的技術手段。

悲觀鎖的處理流程是在對任意記錄進行修改前,先嘗試為該記錄加上排他鎖。如果成功加鎖,那麼就可以對記錄做修改,事務完成後就會解鎖了。如果加鎖失敗,說明該記錄正在被修改,那麼當前操作可能要等待或者拋出異常,具體響應方式由開發者根據實際需要決定。悲觀鎖主要是通過for update來實現的。

相對悲觀鎖而言,樂觀鎖假設數據一般情況下不會造成衝突,所以在數據進行提交更新的時候,才會正式對數據的衝突與否進行檢測,如果發現衝突了,則返回錯誤的信息,讓用戶決定如何去做。在對資料庫進行處理的時候,樂觀鎖並不會使用資料庫提供的鎖機制。一般的實現樂觀鎖的方式就是記錄數據版本。數據版本,就是為數據增加的一個版本標識。當讀取數據時,將版本標識的值一同讀出,數據每更新一次,同時對版本標識進行更新。當我們提交更新的時候,判斷資料庫表對應記錄的當前版本信息與第一次取出來的版本標識進行比對,如果資料庫表當前版本號與第一次取出來的版本標識值相等,則予以更新,否則認為是過期數據。實現數據版本有兩種方式,第一種是使用版本號,第二種是使用時間戳。使用版本號時,可以在數據初始化時指定一個版本號,每次對數據的更新操作都對版本號執行+1操作,並判斷當前版本號是不是該數據的最新的版本號。

Advertisements

Advertisements

你可能會喜歡