色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分布式鎖的基本原理和案例實現

如意 ? 來源:百家號 ? 作者:小碼農談IT ? 2020-07-01 14:53 ? 次閱讀

前面我們有聊過樂觀鎖和悲觀鎖的實現,均是對于單體架構的場景下的實現。那么現在我們來總結看下分布式情況下如何實現鎖機制。

常見場景

我們來看下一個場景,假設我現在在分布式系統下要做一個業務邏輯的消費動作,我如何保證我的消費動作只被消費一次不重復消費?有的同學第一時間就想到了MQ,諸如Zookeeper。我們今天暫不談MQ,那其實核心還是代碼執行的鎖機制問題。

我們再來看一個場景,我們有個接口需要經常查數據庫DB數據,如果場景允許我們經常會對其加一層緩存,并設定過期時間。假設在某一瞬間,緩存過期,但此時并發量又很大,會有大量的請求穿透去數據庫請求數據,造成緩存雪崩效應。于是,我們就可以考慮加鎖機制,只讓一個請求去執行查詢DB更新緩存的操作。

基本原理

回顧下我們之前聊到鎖的原理,分布式鎖也是一樣的,要實現它必須滿足:

互斥:任何時刻只能有一個客戶端對其加鎖;

避免死鎖:要充分考慮某客戶端在持有鎖的期間崩潰,也不能導致后續其他客戶端不能加鎖;

誰加鎖誰解鎖:加鎖和解鎖必須是同一個客戶端,否則容易出現A客戶端把B客戶端的鎖給解了,導致鎖機制失效。

示例實踐

我們僅以Redis實現分布式鎖為例來說明分布式鎖的實現。以單機單機部署Redis的情況為例,如果有分布式Redis集群部署的情況,可以參考Redlock算法的實現。下面我們進入Redis+Lua實現分布式鎖的實踐。

我們來看示例代碼。

加鎖

分布式鎖的基本原理和案例實現

注意到代碼的每個細節了么?都是至關重要的。上面的set是封裝過的,那我們來簡單說明一下這個方法吧,該方法分別對應了上面的鎖需要滿足的條件。比如,NX操作保證了鎖的互斥,設置過期時間避免了死鎖,唯一請求ID用來標注客戶端,在解鎖的時候可以用來校驗是不是同一個客戶端自己的鎖。

解鎖

解鎖這個動作就有趣了,看似簡單卻暗藏玄機,也是很重要的環節。因為解鎖存在一個判斷是都本客戶端的鎖的操作,之后才執行解鎖。而這個if判斷在高并發的情況下我們不得不考慮操作的原子性,這其實和PHP等其他語言代碼考慮高并發的原理是大相徑庭(有興趣的看官也可以思考下,為什么有判斷就要保證原子性呢,有哪些可能出現問題的場景)。那我們如果保證操作的原子性呢?第一反應是想到事務?我們這里借助Lua腳本來保證原子性,Redis的eval命令執行Lua腳本保證原子性。

我們來看下示例代碼

分布式鎖的基本原理和案例實現

我們同樣來說明下面的解鎖代碼。其實很簡單,就是執行了一個Lua腳本,這個腳本實現了或者當前鎖的值,即唯一請求ID值,判斷是否同一個客戶端的請求ID,如果是,則執行Redis的del操作。

好了,關于Redis實現分布式的鎖例子就到這里了,這里只是簡單的示例便于理解,實際生產將需要考慮更多的場景和因素,比如集群,Zookeeper方式實現,時間和能力有限,這里就不展開贅述。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 死鎖
    +關注

    關注

    0

    文章

    25

    瀏覽量

    8075
  • 分布式
    +關注

    關注

    1

    文章

    895

    瀏覽量

    74498
  • 程序互斥
    +關注

    關注

    0

    文章

    3

    瀏覽量

    6151
收藏 人收藏

    評論

    相關推薦

    Redis 分布式的正確實現方式

    分布式一般有三種實現方式:1. 數據庫樂觀;2. 基于Redis的分布式;3. 基于Zoo
    的頭像 發表于 05-31 14:19 ?3587次閱讀

    Java:Redis分布式的原理和案例

    要介紹分布式,首先要提到與分布式鎖相對應的是線程、進程
    的頭像 發表于 07-01 11:49 ?3866次閱讀

    為什么需要分布式 基于Zookeeper安全嗎

    講清楚。導致很多讀者看了很多文章,依舊云里霧里。例如下面這些問題,你能清晰地回答上來嗎? 基于 Redis 如何實現一個分布式? Redis 分布式
    的頭像 發表于 08-10 18:06 ?5601次閱讀

    Redis分布式有什么特性

    今天我們聊聊分布式。 1. 分布式是什么? 我們的手機有、車有、家門有
    的頭像 發表于 10-12 16:42 ?2345次閱讀

    分布式的設計與實現

    今天跟大家探討一下分布式的設計與實現。希望對大家有幫助,如果有不正確的地方,歡迎指出,一起學習,一起進步哈。
    的頭像 發表于 05-13 15:36 ?1748次閱讀

    深入理解redis分布式

    深入理解redis分布式 哈嘍,大家好,我是指北君。 本篇文件我們來介紹如何Redis實現分布式的演進過程,以及為什么不能直接用Setn
    的頭像 發表于 10-08 14:13 ?947次閱讀
    深入理解redis<b class='flag-5'>分布式</b><b class='flag-5'>鎖</b>

    Redis實現分布式的幾種方案

    本文將介紹什么是分布式,以及使用Redis實現分布式的幾種方案。 前言 了解分布式
    的頭像 發表于 10-11 15:19 ?676次閱讀

    什么是分布式 Redis的五種分布式方案

    本地加鎖的方式在分布式的場景下不適用,所以本文我們來探討下如何引入分布式解決本地的問題。本篇所有代碼和業務基于我的開源項目 PassJava。
    發表于 10-23 11:35 ?1172次閱讀
    什么是<b class='flag-5'>分布式</b><b class='flag-5'>鎖</b> Redis的五種<b class='flag-5'>分布式</b><b class='flag-5'>鎖</b>方案

    tldb提供分布式使用方法

    前言:分布式分布式系統中一個極為重要的工具。目前有多種分布式的設計方案,比如借助 redis,mq,數據庫,zookeeper 等第三
    的頭像 發表于 11-02 14:44 ?888次閱讀
    tldb提供<b class='flag-5'>分布式</b><b class='flag-5'>鎖</b>使用方法

    redis分布式如何實現

    Redis分布式是一種基于Redis實現的機制,可以用于多個進程或多臺服務器之間對共享資源的并發訪問控制。在分布式系統中,由于多個進程或多臺服務器同時訪問共享資源,可能會發生數據競爭
    的頭像 發表于 11-16 11:29 ?523次閱讀

    redis分布式死鎖處理方案

    引言: 隨著分布式系統的廣泛應用,尤其是在大規模并發操作下,對并發控制的需求越來越高。Redis分布式作為一種常見的分布式
    的頭像 發表于 11-16 11:44 ?1747次閱讀

    redis分布式的應用場景有哪些

    Redis分布式是一種基于Redis實現分布式機制,可以在分布式環境下確保資源的獨占性,避
    的頭像 發表于 12-04 11:21 ?1427次閱讀

    redis分布式三個方法

    的三種常見的分布式實現方法:基于SETNX命令的簡單分布式、基于SET命令的帶過期時間的分布式
    的頭像 發表于 12-04 11:22 ?1457次閱讀

    如何實現Redis分布式

    機制,下面將詳細介紹如何實現Redis分布式。 一、引言 在分布式系統中,多個節點可能同時讀寫同一共享資源。如果沒有實現互斥訪問和同步機制
    的頭像 發表于 12-04 11:24 ?698次閱讀

    分布式的三種實現方式

    分布式的三種實現方式? 分布式是在分布式系統中用于實現
    的頭像 發表于 12-28 10:01 ?894次閱讀
    主站蜘蛛池模板: 全球真实小U女视频合集| 久久这里只有精品视频e| 伧理片午夜伧理片| 在公交车上被JB草坏了被轮J了| 午夜男人免费福利视频 | 欧美午夜精品A片一区二区HD| 久热久热精品在线观看| 人人干人人看| 一级毛片皇帝 宫女| 在线A亚洲老鸭窝天堂AV高清| xiao776唯美清纯| 被室友C哭调教双性| 好紧的小嫩嫩17p| 国产亚洲精品久久精品录音| 国产一区内射最近更新| 久久大香线蕉综合爱| 久久精品国产亚洲AV麻豆欧美玲 | 好紧好湿太硬了我太爽了文字| 欧美亚洲精品一区二三区8V| 亚洲乱色视频在线观看| 印度最猛性ⅹxxxxx| 99在线这精品视频| A级韩国乱理伦片在线观看| 好男人午夜www视频在线观看 | 99精品国产免费久久久久久下载| jiucao在线观看精品| 国产精品97久久AV色婷婷综合| 国产黄a三级三级三级| 奶头从情趣内衣下露了出来AV| 免费精品美女久久久久久久久 | 亚洲精品无码不卡在线播放he| 啊灬啊灬啊灬快灬深高潮啦| 国产精品久久一区二区三区蜜桃 | 语文老师扒开胸罩喂我奶| 国产精品乱码色情一区二区视频| 欧美精品一区二区在线电影| 午夜理论片YY4399影院| 拔萝卜电视剧高清免费 | 麻豆AV久久AV盛宴AV| 日韩精品亚洲专区在线电影不卡| 香港论理午夜电影网|