鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 歡樂(lè)鎖和悲觀鎖的小問(wèn)題

歡樂(lè)鎖和悲觀鎖的小問(wèn)題

前輩們好!問(wèn)題如下:

面試的時(shí)候經(jīng)常被問(wèn)道歡樂(lè)鎖和悲觀鎖的區(qū)別,小弟想知道,什么情況下用歡樂(lè)鎖,什么情況下用悲觀所,以及如何實(shí)現(xiàn)歡樂(lè)鎖和悲觀鎖?

問(wèn)題有點(diǎn)多,謝謝回答。

回答
編輯回答
歆久

悲觀鎖是顯式的,樂(lè)觀鎖是MVCC

2017年5月6日 01:41
編輯回答
胭脂淚

簡(jiǎn)單來(lái)說(shuō). 樂(lè)觀鎖就是先讓所有并發(fā)訪問(wèn)都能訪問(wèn)到數(shù)據(jù). 在他們提交數(shù)據(jù)的時(shí)候做版本判斷. 如果版本不對(duì). 就提交失敗. 悲觀鎖就是 在并發(fā)訪問(wèn)的時(shí)候排隊(duì). 也可以看作是串行的提交. 比如redis. 用的就是樂(lè)觀鎖. 并發(fā)提交時(shí). 先讓大家都獲取一個(gè)類似于版本記錄的值. 然后真正提交時(shí). 會(huì)對(duì)比這個(gè)值. 如果不符合就提交失敗. 這樣保證只有一個(gè)能提交成功. 而悲觀鎖會(huì)在提交前 獲取一個(gè)類似于寫(xiě)鎖的東西. 只準(zhǔn)一個(gè)人在那寫(xiě). 不能并發(fā). 比如mysql如果你select 的時(shí)候使用了 for update 這樣的語(yǔ)句. 也就相當(dāng)于手動(dòng)加上了一個(gè)悲觀鎖.

2018年5月16日 03:13