悲觀鎖 樂觀鎖

2022-05-11 17:33:39 字數 941 閱讀 5754

一、hibernate完成乙個事務的過程

背景:當多個事務同時要同乙個資料時,如果沒有良好的控制手段,則有可能同乙個資料被別的事務修改而造成混亂,此時,可以利用資料庫底層提供的鎖機制對當前操作的資料進行鎖定,以防止其他事務同時操作事務。

二、悲觀鎖(pessimistic locking)

每次在運算元據時,總是悲觀的認為會有別的事務也會操作同一資料,因此鎖住該資料,直到自己操作完成後在解除鎖。

優點:安全         缺點:效能稍差

可以使用query或criteria的setlockmode()方法來設定。

lockmode.upgrade:利用資料庫的for update子句實現鎖定

lockmode.upgrade_nowwait:使用for update nowait子句進行鎖定,oracle使用。

悲觀鎖使用:

使用query類下的setlockmode()方法,第乙個引數表示資料庫名,第二個引數lockmode.upgrade_nowwait表示強力鎖止,表示任何時候只與允許乙個執行緒操作

三、樂觀鎖(optimistic locking)

相對於悲觀鎖而言,它通常認為多個事務同時操作同乙個資料的情況是很少的,因而不做資料庫層次上的鎖定,只是基於資料版本表示,實現應用程式級別上的鎖定機制。

優點:效能稍差         缺點:安全

樂觀鎖使用:  

為資料增加乙個版本標識,一般是通過資料庫表增加乙個version欄位來實現的。當讀取資料時,版本號自動加一。在提交資料時將現有版本號與資料庫表對應記錄的版本號進行比對,如果提交的資料版本號大於資料庫表中的版本號,則允許更新資料,否則禁止更新資料。

之後在po下的加樂觀鎖的那個類的對應version屬性上加上@version註解

悲觀鎖樂觀鎖

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

樂觀鎖 悲觀鎖

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

樂觀鎖 悲觀鎖

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