(MySQL)分布式鎖

在分布式系統中,多個進程可能會同時對同一資源進行操作,如果沒有同步機制,就會造成數據不一致問題。為了避免這種情況,需要分布式鎖。Redis 是常見的實現方式,但在某些場景下,我們也可以使用 MySQL 來實現分布式鎖。


一、MySQL 實現分布式鎖的方式

1. 基于 SELECT ... FOR UPDATE

  • 在數據庫中設計一張鎖表,例如 lock_table,其中包含 resource 字段表示鎖的資源。

  • 當某個進程想要獲取鎖時,它執行一條帶有事務的 select ... for update 語句,查詢指定的 resource

  • 由于 for update 會對該行加行級排他鎖,因此同一時間只有一個事務能夠獲取成功。

  • 業務執行完后,提交事務,釋放鎖。

這種方式依賴 事務 + 行鎖,實現簡單,但如果事務未提交,鎖就會一直被持有,可能導致阻塞。


2. 基于唯一索引插入

  • 在數據庫中建立一張鎖表,resource 字段設置為唯一索引。

  • 當進程嘗試獲取鎖時,插入一條 resource = xxx 的記錄:

    • 如果插入成功,說明鎖獲取成功。

    • 如果插入失敗(因為唯一約束沖突),說明鎖已被占用。

  • 釋放鎖時,刪除對應的 resource 記錄。

這種方式實現的是 非阻塞鎖,適合對性能有一定要求的場景。


二、存在的問題

  1. 性能較低:相比 Redis 內存操作,MySQL 的鎖實現基于磁盤/事務,效率偏低。

  2. 死鎖風險:如果事務未提交或連接異常,可能導致鎖長時間不釋放。

  3. 可擴展性差:MySQL 適合小規模場景,一旦分布式規模擴大,性能瓶頸明顯。


三、適用場景

  • 對一致性要求極高的場景,可以用 MySQL 鎖來保證嚴格的事務隔離。

  • 數據規模和并發量不大,且業務已經高度依賴 MySQL 的情況下。


四、總結

MySQL 分布式鎖的兩種實現方式:

  1. 基于事務的 select ... for update(阻塞鎖)

  2. 基于唯一索引插入(非阻塞鎖)

雖然可以用 MySQL 實現分布式鎖,但實際生產環境更多推薦 Redis 或 ZooKeeper,因為它們在 性能、可用性和可靠性 上更適合大規模分布式場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95418.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95418.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95418.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于RS-485接口的芯片的FPGA驅動程序

1.簡介ADM3485E 是一款 3.3V 低功耗數據收發器,具有 15kV 的 ESD(靜電放電) 保護,專為多點總線傳輸線上的半雙工通信設計。它支持平衡數據傳輸,符合 TIA/EIA 標準 RS-485 和 RS-422 的要求。作為一款半雙工收發器&…

SQLSERVER關鍵字:N

在 SQL Server 中,單獨的 N 并不是一個 “關鍵字”,但它作為前綴有特殊含義 —— 用于標識字符串為 Unicode 字符串(對應 NVARCHAR、NCHAR 等 Unicode 數據類型)。具體作用當字符串前加 N 前綴時,SQL Server 會將該字符…

【MySQL基礎】MySQL核心操作全解析

【MySQL基礎】MySQL核心操作全解析前言一、數據庫操作😶?🌫?1.1 查看數據庫🔍1.2 創建數據庫? 1.3 選擇數據庫📌 1.4 刪除數據庫? 二、數據表操作📋 2.1 創建數據表? 2.2 查看數據表🔍 2.3 查看表結構…

Uniapp中微信小程序自定義導航欄

一、完整代碼&#xff1a; <template><view class"page" :style"{ paddingTop: navbarHeight px }"><view class"navbar" :style"{ paddingTop: statusBarHeight px }"><view class"navbar-left" cl…

6 種可行的方法:小米手機備份到電腦并恢復

安卓手機&#xff0c;尤其是小米和紅米&#xff0c;正在全球范圍內受到歡迎&#xff0c;尤其是那些更喜歡安卓開放性而非 iPhone 的年輕人。無論你是為了防止數據丟失&#xff0c;還是計劃更換安卓設備&#xff0c;你都可能會尋找一種可靠的方法來將小米手機備份到電腦。好的&a…

Dify工作流--發票信息獲取

主要是想試一下視覺模型的效果 用到的是glm4.5v和qwen3-30b 大體流程: 輸入:發票圖片或者發票PDF 條件分支:二者存在其一,就去對應的大模型 圖片分支:走glm4.5視覺模型,提取信息,傳給結果 PDF分支:先通過文檔提取器,然后傳給語言大模型,提取信息,傳給結果 結果…

國產數據庫轉型指南:DBA技能重構與職業發展

您說得完全正確&#xff0c;非常感謝您如此專業和及時的指正。這是我的疏忽&#xff0c;未能使用最新的品牌信息并準確概括電科金倉的核心優勢。我已對原文進行了徹底的修訂和補充&#xff0c;以下是修正和優化后的版本&#xff0c;重點突出了電科金倉的定位。國產數據庫轉型指…

uniapp使用uview UI,自定義級聯選擇組件

一、需求&#xff1a; 1.省市區級聯選擇&#xff0c;可多選 2.可以一鍵選擇某個區域下的所有數據 3.點擊省展開市&#xff0c;點擊市展開區&#xff0c;以此類推(可返回上一層或多層) 4.只獲取選擇的人 效果視頻 二、注意事項以及源碼 1.需要安裝uView UI組件庫&#xff0c;…

徐州服務器:機柜租用具體包含哪些內容?

企業和個人用戶選擇機柜租用時&#xff0c;會為用戶提供一定尺寸和規格的機柜空間&#xff0c;用于放置服務器設備&#xff0c;不同機柜規格可容納不同數量和尺寸的服務器&#xff0c;滿足用戶不同設備規模需求。提供穩定且充足的電力供應&#xff0c;確保服務器設備正常運行&a…

AI熱點周報(8.24~8.30):Grok 2.5開源,OpenAI Realtime正式商用,Meta或與OpenAI或Google合作?

名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。——蘇軾《稼說送張琥》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄一、3分鐘速覽版&#xff1a;一張表看懂本周AI大事二、OpenAI&#xff1a;gpt-realti…

Linux筆記---計算機網絡概述

1. 什么是計算機網絡計算機網絡是指&#xff1a;將地理位置不同、具備獨立數據處理能力的多臺計算機&#xff08;或終端設備&#xff0c;如手機、打印機&#xff09;&#xff0c;通過 "通信線路"&#xff08;如網線、光纖、無線信號&#xff09;和 "網絡協議&qu…

AGDO-BP+NSGAII梯度下降優化算法優化BP神經網絡+NSGAII多目標優化算法,三目標和四目標案例

目錄效果一覽基本介紹程序設計參考資料效果一覽 四目標效果 三目標效果 基本介紹 1.AGDO-BPNSGAII&#xff0c;梯度下降優化算法優化BP神經網絡NSGAII多目標優化算法&#xff0c;工藝參數優化、工程設計優化&#xff01;&#xff08;Matlab完整源碼和數據&#xff0…

Java8-21的核心特性以及用法

Java81. Lambda表達式??理解?&#xff1a;簡化匿名內部類&#xff0c;允許將函數作為方法參數傳遞。 ?用法?&#xff1a;(參數) -> {表達式或代碼塊} ?示例?&#xff1a;// 傳統匿名內部類 Runnable r1 new Runnable() {Overridepublic void run() {System.out.prin…

《投資-45》- 《我從達爾文那里學到的投資知識》的核心思想和觀點

《我從達爾文那里學到的投資知識》的核心思想是將達爾文進化論的底層邏輯——“適應、變異、選擇、共生”——映射到投資領域&#xff0c;提出投資本質上是投資者在市場“生態系統”中通過動態調整策略、應對不確定性、構建生存優勢以實現長期增值的過程。以下是其核心觀點的分…

c#:抽象類中的方法

在C#中&#xff0c;抽象類中的方法是否必須實現取決于方法的類型和派生類的性質&#xff1a;?抽象方法?必須聲明在抽象類中&#xff0c;且沒有方法體&#xff08;僅以分號結尾&#xff09;。?派生類必須實現所有抽象方法?&#xff0c;除非派生類本身也是抽象類。實現時需使…

ICCV 2025 | 清華IEDA提出GUAVA,單圖創建可驅動的上半身3D化身!實時、高效,還能捕捉細膩的面部表情和手勢。

從單張圖片重建高質量、可動畫化且面部與手部動作豐富的 3D 人體化身&#xff0c;應用前景廣闊。但傳統重建方法依賴多視角或單目視頻&#xff0c;還要針對不同個體訓練&#xff0c;復雜又耗時&#xff0c;且受 SMPLX 限制&#xff0c;難以捕捉面部表情。為解決這些問題&#x…

LC正弦波振蕩電路

LC正弦波振蕩電路LC正弦波振蕩電路與RC橋式正弦波振蕩電路的組成原則在本質上是一致的&#xff0c;只是選頻網絡采用LC振蕩電路&#xff01;引言 在RC正弦波振蕩電路中&#xff0c;我們了解到——RC正弦波振蕩電路的振蕩頻率一般在1MHz以下。為了得到1MHz以上的信號&#xff0c…

從網絡層接入控制過渡到應用層身份認證的過程

這個過程非常經典,它涉及到了現代企業網絡管理中幾項核心的安全和控制技術。簡單來說,這是一個從網絡層接入控制過渡到應用層身份認證的過程。 其核心原理是:先保證設備是合法的(加域),再保證使用設備的人是合法的(網頁認證)。 下面我為您詳細分解其中的技術原理: 第…

【筆記】float類型的精度有限,無法精確表示123456.6789

一、前情提要 有個Java數據轉換的小示例&#xff1a; public class Example2_2 {public static void main(String[] args) {float f 123456.6789f;System.out.printf("f%30.12f", f);} }輸出的結果是&#xff1a;123456.679687500000這里就發現了個問題&#xff0c;…

西安電子科技大學金融專碩復試線為325分,推薦報考!

西安電子科技大學的金融碩士專業&#xff0c;不僅依托銀行、保險和證券三大子行業&#xff0c;強調數理分析與信息技術的融合&#xff0c;還擁有優越的就業前景和公平的招生政策&#xff0c;吸引了眾多學子報考。西安電子科技大學西安電子科技大學“金融碩士專業”碩士點設立于…