亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > MySQL借助DB實現(xiàn)分布式鎖思路詳解

MySQL借助DB實現(xiàn)分布式鎖思路詳解

熱門標簽:怎么在地圖標注位置生成圖片 電銷卡外呼系統(tǒng)供應商 美國反騷擾電話機器人 銅陵防封電銷卡 騰訊地圖標注提升 福建外呼系統(tǒng)定制化 悟空科技電話機器人 真人語音電話機器人 400電話可以免費申請嗎

前言

無論是單機鎖還是分布式鎖,原理都是基于共享的數(shù)據(jù),判斷當前操作的行為。對于單機則是共享RAM內(nèi)存,對于集群則可以借助Redis,ZK,DB等第三方組件來實現(xiàn)。Redis,ZK對分布式鎖提供了很好的支持,基本上開箱即用,然而這些組件本身要高可用,系統(tǒng)也需要強依賴這些組件,額外增加了不少成本。DB對于系統(tǒng)來說本身就默認為高可用組件,針對一些低頻的業(yè)務使用DB實現(xiàn)分布式鎖也是一個不錯的解決方案,比如控制多機器下定時任務的起調(diào),針對審批回調(diào)處理等,本文將給出DB實現(xiàn)分布式鎖的一些場景以及解決方案,希望對你啟發(fā)。

表設(shè)計

首先要明確DB在系統(tǒng)中仍然需要認為是最脆弱的一環(huán),因此在設(shè)計時需要考慮壓力問題,即能應用實現(xiàn)的邏輯就不要放到DB上實現(xiàn),也就是盡量少使用DB提供的鎖能力,如果是高并發(fā)業(yè)務則要避免使用DB鎖,換成Redis等緩存鎖更加有效。如清單1所示,該表中唯一的約束為lock_name,timestamp,version三者組合主鍵,下文會利用這三者實現(xiàn)悲觀鎖,樂觀鎖等業(yè)務場景。

清單1: 分布式鎖表結(jié)構(gòu)

CREATE TABLE `lock` (
`lock_name` varchar(32) NOT NULL DEFAULT '' COMMENT '鎖名稱',
`resource` bigint(20) NOT NULL COMMENT '業(yè)務主鍵',
`version` int(5) NOT NULL COMMENT '版本',
`gmt_create` datetime NOT NULL COMMENT '生成時間',
PRIMARY KEY (`lock_name`,`resource`,`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

悲觀鎖實現(xiàn)

對于悲觀鎖業(yè)務中常見的操作有以下兩種:


針對A:

A場景當一臺機器獲取到鎖后,其他機器處于排隊狀態(tài),鎖釋放后其他機器才能夠繼續(xù)下去,這種應用層面解決是相當麻煩,因此一般使用DB提供的行鎖能力,即select xxx from xxx for update。A場景一般都和業(yè)務強關(guān)聯(lián),比如庫存增減,使用業(yè)務對象作為行鎖即可。需要注意的是,該方案本質(zhì)上鎖壓力還是在數(shù)據(jù)庫上,當阻塞住的線程過多,且操作耗時,最后會出現(xiàn)大量鎖超時現(xiàn)象。

針對B:

針對B場景(tryLock)舉個具體業(yè)務,在集群下每臺機器都有定時任務,但是業(yè)務上要求同一時刻只能有一臺能正常調(diào)度。
解決思路是利用唯一主鍵約束,插入一條針對TaskA的記錄,版本則默認為1,插入成功的算獲取到鎖,繼續(xù)執(zhí)行業(yè)務操作。這種方案當機器掛掉就會出現(xiàn)死鎖,因此還需要有一個定時任務,定時清理已經(jīng)過期的鎖,清理維度可以根據(jù)lock_name設(shè)置不同時間清理策略。

定時任務清理策略會額外帶來復雜度,假設(shè)機器A獲取到了鎖,但由于CPU資源緊張,導致處理變慢,此時鎖被定時任務釋放,因此機器B也會獲取到鎖,那么此時就出現(xiàn)同一時刻兩臺機器同時持有鎖的現(xiàn)象,解決思路:把超時時間設(shè)置為遠大于業(yè)務處理時間,或者增加版本機制改成樂觀鎖。

insert into lock set lock_name='TaskA' , resource='鎖住的業(yè)務',version=1,gmt_create=now()
success: 獲取到鎖
failed:放棄操作
釋放鎖

樂觀鎖實現(xiàn)

針對樂觀鎖場景,舉個具體業(yè)務,在后臺系統(tǒng)中經(jīng)常使用大json擴展字段存儲業(yè)務屬性,在涉及部分更新時,需要先查詢出來,合并數(shù)據(jù),寫入到DB,這個過程中如果存在并發(fā),則很容易造成數(shù)據(jù)丟失,因此需要使用鎖來保證數(shù)據(jù)一致性,相應操作如下所示,針對樂觀鎖,不存在死鎖,因此這里直接存放業(yè)務id字段,保證每一個業(yè)務id有一條對應的記錄,并且不需要對應的定時器清除。

select * from lock where lock_name='業(yè)務名稱', resource='業(yè)務id';
不存在: insert into lock set lock_name='業(yè)務名稱', resource='業(yè)務id' , version=1;
獲取版本: version
業(yè)務操作: 取數(shù)據(jù),合并數(shù)據(jù),寫回數(shù)據(jù)
寫回到DB: update lock set version=version+1 where lock_name='業(yè)務名稱' and resource='業(yè)務id' and version= #{version};
寫回成功: 操作成功
寫回失敗: 回滾事務,從頭操作

樂觀鎖寫入失敗會回滾整個事務,因此如果寫入沖突很頻繁的場景不適合使用樂觀鎖,大量的事務回滾會給DB巨大壓力,最終影響到具體業(yè)務系統(tǒng)。

總結(jié)

分布式鎖的原理實際上很容易理解,難的是如何在具體業(yè)務場景上選擇最合適的方案。無論是哪一種鎖方案都是與業(yè)務密切關(guān)聯(lián),總之沒有完美的分布式鎖方案,只有最適合當前業(yè)務的鎖方案。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • Java使用Redisson分布式鎖實現(xiàn)原理
  • Java編程redisson實現(xiàn)分布式鎖代碼示例
  • Redis分布式鎖的正確實現(xiàn)方法總結(jié)
  • Redis分布式鎖的實現(xiàn)方式(redis面試題)
  • springboot redis分布式鎖代碼實例
  • SpringBoot使用Redisson實現(xiàn)分布式鎖(秒殺系統(tǒng))
  • SpringBoot集成Redisson實現(xiàn)分布式鎖的方法示例
  • Java Redis分布式鎖的正確實現(xiàn)方式詳解
  • Java redisson實現(xiàn)分布式鎖原理詳解

標簽:武威 臨汾 聊城 白銀 云浮 湖南 湖北 烏海

巨人網(wǎng)絡(luò)通訊聲明:本文標題《MySQL借助DB實現(xiàn)分布式鎖思路詳解》,本文關(guān)鍵詞  MySQL,借助,實現(xiàn),分布式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL借助DB實現(xiàn)分布式鎖思路詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL借助DB實現(xiàn)分布式鎖思路詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产福利免费视频| 成人影院一区二区三区| 免费一级片网站| 久久久久久久免费视频| 一级片免费在线观看视频| 高清一级毛片一本到免费观看| 色综合久久手机在线| 青青青草影院| 色综合久久天天综合观看| 青草国产在线观看| 中文字幕一区二区三区精彩视频 | 国产91精品一区| 国产国产人免费视频成69堂| 国产视频网站在线观看| 亚洲wwwwww| 国产亚洲精品aaa大片| 精品视频在线观看一区二区 | 国产麻豆精品高清在线播放| 国产网站免费在线观看| 久久国产精品自线拍免费| 一本伊大人香蕉高清在线观看| 国产成人啪精品| 久久99爰这里有精品国产| 国产伦久视频免费观看视频| 欧美大片一区| 国产激情视频在线观看| 精品国产香蕉在线播出 | 成人免费网站视频ww| 色综合久久天天综线观看| 日韩专区一区| 九九九在线视频| 日日夜夜婷婷| 久久久久久久免费视频| 国产伦精品一区三区视频| 欧美大片a一级毛片视频| 久久成人亚洲| 久久国产影视免费精品| 国产视频一区二区三区四区| 国产伦精品一区二区三区无广告| 国产网站免费视频| 韩国三级香港三级日本三级la| 国产极品白嫩美女在线观看看| 国产网站在线| 一本高清在线| 精品视频免费在线| 99色视频在线| 欧美国产日韩在线| 免费一级片网站| 在线观看成人网 | 中文字幕一区二区三区精彩视频 | 欧美一级视频免费| 国产极品精频在线观看| 国产视频一区二区在线观看| 欧美大片a一级毛片视频| 99久久网站| 日韩专区一区| 久久精品成人一区二区三区| 欧美日本韩国| 国产成人啪精品视频免费软件| 精品视频一区二区三区| 国产福利免费视频| 精品在线视频播放| 美国一区二区三区| 999久久66久6只有精品| 国产一区二区福利久久| 日韩在线观看视频网站| 欧美日本免费| 九九热精品免费观看| 欧美激情一区二区三区视频高清| 你懂的在线观看视频| 久草免费资源| 精品视频在线观看一区二区 | 亚洲不卡一区二区三区在线| 免费毛片播放| 日韩免费在线视频| 一级女性全黄生活片免费| 日韩一级黄色片| 国产一区二区精品在线观看| 人人干人人草| 国产成人啪精品| 日韩在线观看免费| 91麻豆精品国产自产在线观看一区| 超级乱淫黄漫画免费| 99热精品在线| 久草免费在线视频| 国产伦久视频免费观看视频| 国产激情一区二区三区| 国产一区免费在线观看| 日韩在线观看视频黄| 91麻豆tv| 国产一级生活片| 精品在线视频播放| 国产国语对白一级毛片| 一级女人毛片人一女人| 国产高清在线精品一区a| 久久国产精品永久免费网站| 国产视频一区在线| 一级毛片视频在线观看| 中文字幕97| 麻豆网站在线看| 欧美激情在线精品video| 成人高清视频免费观看| 久久精品成人一区二区三区| a级精品九九九大片免费看| 日韩免费在线观看视频| 国产原创视频在线| 亚飞与亚基在线观看| 成人高清免费| 欧美一级视频免费| 久久精品成人一区二区三区| 久草免费在线色站| 成人免费网站久久久| 国产91视频网| 国产一区二区高清视频| 高清一级片| 97视频免费在线| 久久99这里只有精品国产| 日本免费乱理伦片在线观看2018| 一级女性全黄久久生活片| 日韩在线观看免费| 欧美a免费| 国产成人精品综合| 高清一级片| 亚洲www美色| 国产麻豆精品高清在线播放| 超级乱淫黄漫画免费| 精品在线视频播放| 99色吧| 国产伦精品一区三区视频| 欧美电影免费| 日本免费乱理伦片在线观看2018| 成人免费观看的视频黄页| 天天做人人爱夜夜爽2020毛片| 成人免费高清视频| 国产成人精品在线| 国产视频网站在线观看| 国产视频一区在线| 天天色成人| 日本伦理片网站| 九九九在线视频| 你懂的在线观看视频| 午夜在线亚洲男人午在线| 中文字幕一区二区三区精彩视频 | 九九精品久久久久久久久| 成人免费观看网欧美片| 国产不卡高清在线观看视频| 成人高清视频免费观看| 韩国三级香港三级日本三级| 免费国产在线观看| 亚洲天堂一区二区三区四区| 精品国产三级a| 91麻豆精品国产高清在线| 四虎久久精品国产| 国产亚洲免费观看| 天天做日日爱| 欧美国产日韩在线| 精品国产亚一区二区三区| 亚欧乱色一区二区三区| 日韩av成人| 色综合久久天天综合观看| 四虎论坛| 成人在激情在线视频| 国产福利免费观看| 国产一区二区精品在线观看| 欧美一级视频免费| 人人干人人草| 欧美一区二区三区性| 日韩专区一区| 一本高清在线| 欧美18性精品| 久久久久久久免费视频| 国产麻豆精品视频| 黄色福利片| 国产福利免费观看| 日韩男人天堂| 一级毛片视频免费| 中文字幕Aⅴ资源网| 国产综合91天堂亚洲国产| 国产综合91天堂亚洲国产| 黄视频网站在线免费观看| 国产国产人免费视频成69堂| 国产91精品一区| 久久精品免视看国产成人2021| 九九九国产| 午夜在线亚洲| 久久精品免视看国产明星| 国产视频网站在线观看| 欧美激情伊人| 精品视频免费在线| 日韩专区在线播放| 日韩中文字幕一区二区不卡| 人人干人人插| 精品毛片视频| 午夜在线亚洲| 欧美a级片视频| 韩国毛片免费大片| 香蕉视频亚洲一级| 黄视频网站免费| 日本免费区| 美女免费精品高清毛片在线视|