国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分布式鎖的幾種實現(xiàn)方式:

這篇具有很好參考價值的文章主要介紹了分布式鎖的幾種實現(xiàn)方式:。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一:通過redis實現(xiàn)

redis是基于單線程,在某個時刻只會有一個線程執(zhí)行命令,可以利用set原子性的操作,配合set nx(RedisStringCommands.SetOption.SET_IF_ABSENT) ,這樣,當(dāng)多個線程或多個節(jié)點嘗試獲取鎖時,只有一個可以成功,其他的會因為鎖已存在而獲取失敗。這種方式通過 Redis 來實現(xiàn)分布式鎖,可以確保在不同的應(yīng)用實例或節(jié)點之間同步對共享資源的訪問,從而避免并發(fā)沖突。
優(yōu)點:實現(xiàn)簡單,在內(nèi)存的中獲取的鎖,很快。


缺點:鎖有點重,對AB倆個線程,A在某一時刻獲取了鎖,B線程只能等待。B線程需要阻塞。
可能出現(xiàn)的問題:會造成死鎖的情況,當(dāng)A競爭到了鎖,如果A在此刻由于內(nèi)部異常造成A掛了,沒有釋放掉鎖,就會造成B死鎖。


死鎖處理方案:
1、設(shè)置一個key的TTL過期時間。
2、處理完之后,主動將鎖釋放(將key del掉)
3、當(dāng)然除了以上倆種常用的處理方式還可以使用樂觀鎖的處理方式。樂觀鎖通過維護一個版本號,如果版本號和鎖的版本號一直即可獲得鎖,和其他的樂觀鎖類似,樂觀鎖在一定程度上可以防止死鎖,但也會存在缺點:系統(tǒng)必要的開銷會增大,若版本號不一致,會一直比對版本號,若鎖被頻繁搶奪可能對系統(tǒng)的性能產(chǎn)生影響。
4、使用紅鎖redLock,基本思想:在多個redis節(jié)點中,使用全局唯一的key,設(shè)置不同的value(可以為uuid、時間戳等),當(dāng)set的value和攜帶的value大部分節(jié)點的值一致則說明獲取到鎖成功。(為啥要大部分,不要完全?因為在不同的節(jié)點setkey可能會有網(wǎng)絡(luò)延遲,時鐘漂移等情況?;蛘邩O端情況下,高并發(fā)多個節(jié)點同時set成功)

二、通過MQ實現(xiàn)

1、可以通過設(shè)置MQ隊列

channel.queueDeclare("myLockQueue", false, true, false, arguments);

將參數(shù)設(shè)置 exclusive=truedurable=false,確保它是一個獨占隊列只能有一個連接且非持久化的隊列。

在綁定了此隊列的消費者,獲取鎖的時候,在同一時刻只能有一個消費者能夠去消費此隊列里面的消息,在消費者消費完之后就將隊列的里面的鎖重新publish上去。等待第二個消費者進行消費。

鎖的產(chǎn)生:

  • 當(dāng)一個消費者需要獲取鎖時,它向隊列發(fā)送一個消息,表示它要獲取鎖。
  • 由于隊列是獨占的,同一時刻只能有一個消費者能夠消費隊列中的消息。

鎖的釋放:

當(dāng)獲取到鎖的消費者獲取到之后,就重新將“鎖”消息publish上去,等待下一個消費者獲取。

基于MQ的方式實現(xiàn)的分布式鎖也會產(chǎn)生一些問題:

1、當(dāng)消息丟失了,如果時在消費者消費完之后往隊列里面添加釋放鎖的消息,消息沒有推送到隊列里面去,就會造成其他已經(jīng)進入隊列想要獲取到鎖的消費者進行死鎖或者鎖無法釋放。基于這種問題的解決方案可以使用重試機制,在一定次數(shù)的重試方式避免引發(fā)上述問題。

2、在并發(fā)的場景下,由于MQ的消息是異步的,本身在獲取鎖的時候就會帶來時間的延遲問題,某個消息丟失,消費者A和消費者B在處理的消息時,消息的狀態(tài)不一致,導(dǎo)致消費者A誤以為拿到了鎖,而繼續(xù)業(yè)務(wù)邏輯操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-802362.html

到了這里,關(guān)于分布式鎖的幾種實現(xiàn)方式:的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Redis——》Redis的部署方式對分布式鎖的影響

    Redis——》Redis的部署方式對分布式鎖的影響

    推薦鏈接: ????總結(jié)——》【Java】 ????總結(jié)——》【Mysql】 ????總結(jié)——》【Redis】 ????總結(jié)——》【Kafka】 ????總結(jié)——》【Spring】 ????總結(jié)——》【SpringBoot】 ????總結(jié)——》【MyBatis、MyBatis-Plus】 ????總結(jié)——》【Linux】 ????總結(jié)——》【MongoDB】 ???

    2024年02月10日
    瀏覽(24)
  • 分布式鎖的實現(xiàn)(redis)

    1、單機鎖 考慮在并發(fā)場景并且存在競態(tài)的狀況下,我們就要實現(xiàn)同步機制了,最簡單的同步機制就是加鎖。 加鎖可以幫我們鎖住資源,如內(nèi)存中的變量,或者鎖住臨界區(qū)(線程中的一段代碼),使得同一個時刻只有一個線程能訪問某一個區(qū)域。 如果是單實例(單進程部署),那

    2024年02月12日
    瀏覽(20)
  • Java中常見的幾種分布式鎖介紹及實戰(zhàn)應(yīng)用

    Java中常見的幾種分布式鎖介紹及實戰(zhàn)應(yīng)用

    場景描述 鎖 在JAVA中是一個非常重要的概念,尤其是在當(dāng)今的互聯(lián)網(wǎng)時代,高并發(fā)的場景下,更是離不開鎖。那么鎖到底是什么呢?在計算機科學(xué)中,鎖(lock)或互斥(mutex)是一種同步機制,用于在有許多執(zhí)行線程的環(huán)境中強制對資源的訪問限制。鎖旨在強制實施互斥排他、并發(fā)

    2023年04月17日
    瀏覽(16)
  • ZooKeeper分布式鎖的實現(xiàn)與應(yīng)用

    ZooKeeper是一種分布式應(yīng)用程序協(xié)調(diào)服務(wù),它可以管理大規(guī)模的集群,并提供可靠的、有序的、高效的數(shù)據(jù)通信。其中,ZooKeeper提供的分布式鎖是一種常見的分布式鎖實現(xiàn),本文將對其進行詳細介紹。 在分布式系統(tǒng)中,多個進程或節(jié)點可能需要同時訪問共享資源。為了確保數(shù)據(jù)

    2024年02月02日
    瀏覽(21)
  • 高并發(fā)緩存問題分析以及分布式鎖的實現(xiàn)

    高并發(fā)緩存問題分析以及分布式鎖的實現(xiàn)

    在高并發(fā)的環(huán)境下,比如淘寶,京東不定時的促銷活動,大量的用戶訪問會導(dǎo)致數(shù)據(jù)庫的性能下降,進而有可能數(shù)據(jù)庫宕機從而不能產(chǎn)生正常的服務(wù),一般一個系統(tǒng)最大的性能瓶頸,就是數(shù)據(jù)庫的io操作,如果發(fā)生大量的io那么他的問題也會隨之而來。從數(shù)據(jù)庫入手也是調(diào)優(yōu)性價比最高

    2024年01月19日
    瀏覽(34)
  • 深入理解PHP+Redis實現(xiàn)分布式鎖的相關(guān)問題

    PHP使用分布式鎖,受語言本身的限制,有一些局限性。 通俗理解單機鎖問題:自家的鎖鎖自家的門,只能保證自家的事,管不了別人家不鎖門引發(fā)的問題,于是有了分布式鎖。 分布式鎖概念:是針對多個節(jié)點的鎖。避免出現(xiàn)數(shù)據(jù)不一致或者并發(fā)沖突的問題,讓每個節(jié)點確保

    2024年03月23日
    瀏覽(28)
  • 從原理到實踐,分析 Redisson 分布式鎖的實現(xiàn)方案(二)

    從原理到實踐,分析 Redisson 分布式鎖的實現(xiàn)方案(二)

    ????????上篇講解了如何用 Redis 實現(xiàn)分布式鎖的方案,它提供了簡單的原語來實現(xiàn)基于Redis的分布式鎖。然而,Redis作為分布式鎖的實現(xiàn)方式也存在一些缺點。本文將引入Redisson來實現(xiàn)分布式鎖。 ????????Redisson是一個基于Redis的分布式Java框架。它提供了豐富的功能和工

    2024年02月15日
    瀏覽(17)
  • Redis實戰(zhàn)案例14-分布式鎖的基本原理、不同實現(xiàn)方法對比以及基于Redis進行實現(xiàn)思路

    Redis實戰(zhàn)案例14-分布式鎖的基本原理、不同實現(xiàn)方法對比以及基于Redis進行實現(xiàn)思路

    基于數(shù)據(jù)庫的分布式鎖:這種方式使用數(shù)據(jù)庫的特性來實現(xiàn)分布式鎖。具體流程如下: 獲取鎖:當(dāng)一個節(jié)點需要獲得鎖時,它嘗試在數(shù)據(jù)庫中插入一個特定的唯一鍵值(如唯一約束的主鍵),如果插入成功,則表示獲得了鎖。 釋放鎖:當(dāng)節(jié)點完成任務(wù)后,通過刪除該唯一鍵

    2024年02月13日
    瀏覽(49)
  • Zookeeper 和 Redis 哪種更好? 為什么使用分布式鎖? 1. 利用 Redis 提供的 第二種,基于 ZK 實現(xiàn)分布式鎖的落地方案 對于 redis 的分布式鎖而言,它有以下缺點:

    關(guān)于這個問題,我們 可以從 3 個方面來說: 為什么使用分布式鎖? 使用分布式鎖的目的,是為了保證同一時間只有一個 JVM 進程可以對共享資源進行操作。 根據(jù)鎖的用途可以細分為以下兩類: 允許多個客戶端操作共享資源,我們稱為共享鎖 這種鎖的一般是對共享資源具有

    2024年01月16日
    瀏覽(24)
  • 分布式鎖原理與實戰(zhàn)三:ZooKeeper分布式鎖的原理

    分布式鎖原理與實戰(zhàn)三:ZooKeeper分布式鎖的原理

    ???????? 目錄 ZooKeeper分布式鎖的原理 ZooKeeper的每一個節(jié)點,都是一個天然的順序發(fā)號器。 ZooKeeper節(jié)點的遞增有序性,可以確保鎖的公平 ZooKeeper的節(jié)點監(jiān)聽機制,可以保障占有鎖的傳遞有序而且高效 ZooKeeper的節(jié)點監(jiān)聽機制,能避免羊群效應(yīng) 分布式鎖的搶占過程 客戶端

    2024年02月08日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包