日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并发控制--悲观锁和乐观锁详解

發(fā)布時(shí)間:2025/3/21 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发控制--悲观锁和乐观锁详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

考慮下面兩個(gè)并發(fā)帶來的問題:

1、丟失更新:一個(gè)事務(wù)的更新結(jié)果覆蓋了其它事務(wù)的更新結(jié)果,即所謂的更新丟失。

2、臟讀:當(dāng)一個(gè)事務(wù)讀取其它完成一半事務(wù)的記錄時(shí),就會發(fā)生臟讀取。

例如:

兩個(gè)用戶同時(shí)修改商品庫存表,A、B同時(shí)進(jìn)入,看到的庫存都是100,A購買一件把庫存修改為99(100-1)。此時(shí)B購買兩件把庫存修改為98(100-2),因?yàn)锳、B同時(shí)讀到的庫存都是100,B并不能看到A做的庫存更新,所以造成B臟讀,造成A丟失更新。

所以為了解決這些并發(fā)帶來的問題。 我們需要引入并發(fā)控制機(jī)制--鎖。

?

鎖分類

悲觀鎖

悲觀鎖就是用戶修改數(shù)據(jù)時(shí)看起來很悲觀,保守態(tài)度,擔(dān)心別的用戶會同時(shí)修改這條數(shù)據(jù),所以每次修改時(shí)會提前把這條數(shù)據(jù)鎖定起來,只有自己可修改(但別的用戶可以讀),等自己修改完了再釋放鎖。

?

樂觀鎖

樂觀鎖就是用戶修改數(shù)據(jù)時(shí)心態(tài)很樂觀,不管別人修改不修改數(shù)據(jù),我都不上鎖,我修改的時(shí)候判斷下數(shù)據(jù)有沒有發(fā)生變化,沒發(fā)生變化我就會更新成功,發(fā)生變化了就不會更新成功我再去重試之前的動(dòng)作直到更新成功。

?

鎖應(yīng)用

悲觀鎖

使用悲觀鎖的時(shí)候我們首先必須關(guān)閉mysql數(shù)據(jù)庫的自動(dòng)提交屬性,因?yàn)镸ySQL默認(rèn)使用autocommit模式,也就是說,當(dāng)你執(zhí)行一個(gè)更新操作后,MySQL會立刻將結(jié)果進(jìn)行提交。

關(guān)閉命令為:set autocommit=0;

?

悲觀鎖一般使用select…for update實(shí)現(xiàn),在執(zhí)行的時(shí)候會鎖定數(shù)據(jù),雖然會鎖定數(shù)據(jù),但是不影響其他事務(wù)的普通查詢使用。

在我們使用悲觀鎖的時(shí)候事務(wù)中的語句例如:

//開始事務(wù) begin;/begin work;/start transaction; (三選一)//查詢信息 select * from order where id=1 for update;//修改信息 update order set name='names';//提交事務(wù) commit;/commit work;(二選一)

此處的查詢語句for update關(guān)鍵字,在事務(wù)中只有SELECT ... FOR UPDATE 或LOCK IN SHARE MODE 同一條數(shù)據(jù)時(shí)會等待其它事務(wù)結(jié)束后才執(zhí)行,一般的SELECT查詢則不受影響。

?

注意事項(xiàng)

執(zhí)行事務(wù)時(shí)關(guān)鍵字select…for update會鎖定數(shù)據(jù),防止其他事務(wù)更改數(shù)據(jù)。但是鎖定數(shù)據(jù)也是有規(guī)則的。

?

查詢條件與鎖定范圍:

1、具體的主鍵值為查詢條件

比如查詢條件為主鍵ID=1等等,如果此條數(shù)據(jù)存在,則鎖定當(dāng)前行數(shù)據(jù),如果不存在,則不鎖定。

?

2、不具體的主鍵值為查詢條件

比如查詢條件為主鍵ID>1等等,此時(shí)會鎖定整張數(shù)據(jù)表。

?

3、查詢條件中無主鍵

會鎖定整張數(shù)據(jù)表。

?

4、如果查詢條件中使用了索引為查詢條件

明確指定索引并且查到,則鎖定整條數(shù)據(jù)。如果找不到指定索引數(shù)據(jù),則不加鎖。

?

樂觀鎖

1、使用自增長的整數(shù)表示數(shù)據(jù)版本號,更新時(shí)檢查版本號是否一致,比如數(shù)據(jù)庫中數(shù)據(jù)版本為666,更新提交時(shí)version=666+1,使用該version值(=667)與數(shù)據(jù)庫version+1(=667)作比較,如果相等,則可以更新,如果不等則有可能其他程序已更新該記錄,所以返回錯(cuò)誤或者發(fā)起重試動(dòng)作。

?

例如表

student(id,name,version)

1 ? ? a ? ? ? 1

當(dāng)事務(wù)一進(jìn)行更新操作:update student set name='txt' where id = #{id} and version = #{version};

此時(shí)操作完后數(shù)據(jù)會變?yōu)閕d = 1,name = txt,version = 2,當(dāng)另外一個(gè)事務(wù)二同樣執(zhí)行更新操作的時(shí)候,卻發(fā)現(xiàn)version != 1,此時(shí)事務(wù)二就會操作失敗,從而保證了數(shù)據(jù)的正確性。

2、使用時(shí)間戳來實(shí)現(xiàn),原理同上。

3、使用其他數(shù)據(jù)庫字段,如:金額,更新時(shí)添加條件判斷金額是否變化,原理同上。

?

樂觀鎖圖示

?

結(jié)論

兩種鎖各有優(yōu)缺點(diǎn),不能單純的定義哪個(gè)好于哪個(gè)。樂觀鎖比較適合數(shù)據(jù)修改比較少,讀取比較頻繁的場景,即使出現(xiàn)了少量的沖突,這樣也省去了大量的鎖的開銷,故而提高了系統(tǒng)的吞吐量。但是如果經(jīng)常發(fā)生沖突(寫數(shù)據(jù)比較多的情況下),上層應(yīng)用不不斷的retry,這樣反而降低了性能,對于這種情況使用悲觀鎖就更合適。

總結(jié)

以上是生活随笔為你收集整理的并发控制--悲观锁和乐观锁详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品国产精品 | 国产国语性生话播放 | 性欧美熟妇videofreesex | 亚洲自拍p | 国产精品久久久久久久久免费看 | 日日夜夜精品免费视频 | 一本亚洲 | 久久人人爽人人 | 国产精品3区 | 99国产精品白浆在线观看免费 | 男女免费观看视频 | 在线观看网站黄 | 亚洲精品综合在线观看 | 亚洲一区二区三区av无码 | 国产精品久久久久久亚洲伦 | 国产又粗又猛又爽又黄的视频一 | 色就是色网站 | 91精品国产闺蜜国产在线闺蜜 | 日韩欧美一二三区 | 久久y| 亚洲精品97久久中文字幕 | 日本精品网站 | www国产精品视频 | 天天干天天弄 | 美女搡bbb又爽又猛又黄www | 免费在线观看不卡av | 加勒比在线一区 | 日韩电影在线观看一区 | 对白刺激国产子与伦 | 欧美操女人 | 欧美激情在线一区 | 国产91精品一区二区麻豆亚洲 | 亚洲一区免费看 | 黄色片网站在线 | 国产浮力第一页 | 久久久久久久蜜桃 | 天堂资源中文在线 | 国产精品第9页 | 日韩伦理一区二区 | 香蕉成视频人app下载安装 | 午夜精品区 | 国产乱人乱精一区二视频国产精品 | 黄色小网站入口 | 国产精品视频看看 | 17c在线观看 | 免费黄色一级片 | 夜夜嗨老熟女av一区二区三区 | 亚洲一区精品视频 | 性久久久久久 | 野外(巨肉高h) | 欧美色图五月天 | 欧美性生活一级 | 色天天色综合 | 国产精品无码一区 | 国产视频一区二区三区在线播放 | 日产精品久久久久久久蜜臀 | 国产精品久久久久久久妇 | 成人涩涩| 亚洲视频久久 | 欧美精品电影一区二区 | 日韩专区中文字幕 | 丰满人妻一区二区三区53视频 | 欧美色精品 | 天天操狠狠干 | 久久免费黄色 | 精品无码av一区二区三区不卡 | 男人插女人网站 | 老色鬼网站| 国产色一区二区 | 国产日韩欧美综合在线 | 亚洲一区高清 | 日本高清www免费视频 | 91精品小视频 | 伊人久久精品一区二区三区 | 久久久免费高清视频 | av中文一区 | 中国大陆高清aⅴ毛片 | 国产精品视频不卡 | 亚洲小视频 | 亚洲少妇第一页 | 99re视频在线播放 | 亚洲欧洲精品一区二区 | 91午夜精品亚洲一区二区三区 | 精品日韩中文字幕 | 91蜜桃臀久久一区二区 | 激情无码人妻又粗又大 | 国产动漫av | 中国少妇毛片 | 噜噜噜久久久 | ,一级淫片a看免费 | 成年人网站黄色 | 国产亚洲精品久久久久久无几年桃 | 高清国产一区二区三区四区五区 | 成年人性生活免费视频 | 蜜桃臀aⅴ精品一区二区三区 | 天天舔天天操天天干 | 91久久久久一区二区 | 日韩精品视频一区二区三区 | 91在线小视频 |