米聯客-ZYNQ-MZ7X400核心板硬體手冊
阿新 • • 發佈:2022-03-31
一、樂觀鎖
認為對同一個資料的併發操作,不會造成衝突。在事務要提交更新的時候,才會對資料進行衝突校驗。
第一次讀的時候,獲取到某個欄位值,如版本或時間戳。處理完業務邏輯要開始更新的時候,需要再次檢視這個欄位是不是和第一次一樣。如果一樣就更新,反之拒絕。
可以使用資料版本記錄機制或時間戳實現。
經典應用:共享文件,CAS,MVCC。
特點:併發度高,不會發生死鎖。
二、悲觀鎖
具有強烈的獨佔和排他特性。認為併發操作一定會修改資料。所以在處理資料之前,要先對資料加鎖,直到完成修改才釋放鎖。
比如MySQL預設可重複讀隔離級別,使用悲觀鎖,要先關閉set_autocommit=0的自動提交屬性。
使用lock in share mode 和 for update兩種方式來實現select的讀取鎖。lock in share mode在一個事務要update同一個表單的時候,會很容易造成死鎖。
for update有行鎖和表鎖。
特點:併發度小。
三、總結
悲觀鎖適合寫操作非常多的場景,樂觀鎖適合讀操作非常多的場景。