最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis分布式鎖使用及說明

 更新時(shí)間:2025年01月08日 08:44:37   作者:MuseLss  
本文總結(jié)了Redis和Zookeeper在高可用性和高一致性場(chǎng)景下的應(yīng)用,并詳細(xì)介紹了Redis的分布式鎖實(shí)現(xiàn)方式,包括使用Lua腳本和續(xù)期機(jī)制,最后,提到了RedLock算法的適用場(chǎng)景和缺點(diǎn)

Redis分布式鎖

如果追求高可用性(AP) 就采用redis

如果追求高一致性(CP) 就采用zookeeper

加鎖方式

set lockKey uniqueId NX PX expireTime
  • lockKey可以根據(jù)業(yè)務(wù)自己定義(如訂單)
  • uniqueId是為了不解錯(cuò)鎖(uniqueId可以是session Id 或者線程Id等)

怎么會(huì)解錯(cuò)鎖?舉個(gè)小案例吧

  • S1 獲得Lock,ttl時(shí)間5s,實(shí)際執(zhí)行了7s
  • S2 獲得Lock,ttl時(shí)間5s,實(shí)際執(zhí)行了4s

如果沒有uniqueId S1在第7s的時(shí)候解鎖,或解了S2的鎖

  • NX代表當(dāng)前不存在鎖的時(shí)候才能加鎖成功
  • PX毫秒過期時(shí)間,如果是秒就用ES

解鎖方式

通過lua腳本實(shí)現(xiàn)原子操作,先進(jìn)行uniqueId對(duì)比操作,如果相同,則執(zhí)行del解鎖操作

if redis.call("GET",KEYS[1]) == ARGV[1]
then
return redis.call("DEL",KEYS[1])
else
return 0
end

續(xù)期

當(dāng)分布式鎖到達(dá)了超時(shí)時(shí)間,但是業(yè)務(wù)并沒有完成,則將對(duì)鎖進(jìn)行續(xù)期

S1 獲得Lock,ttl時(shí)間5s,實(shí)際執(zhí)行了7s,如果沒有續(xù)期那么S1后2秒就沒有鎖

續(xù)期的兩種方式:

  • 開啟一個(gè)后臺(tái)守護(hù)線程,每隔3秒對(duì)key設(shè)置ttl時(shí)間5S進(jìn)行續(xù)期,當(dāng)主線程執(zhí)行完操作之后,對(duì)key進(jìn)行解鎖,那么守護(hù)進(jìn)行也隨之消亡
  • 采用異步任務(wù),獲得鎖后,把所有鎖的線程放到一個(gè)Map里,然后每隔幾秒進(jìn)行輪詢,如果客戶端還持有鎖(即Map中還存在),就延長(zhǎng)ttl時(shí)間

RedLock算法對(duì)應(yīng)的場(chǎng)景 主節(jié)點(diǎn)掛掉后,lockkey還未同步到從節(jié)點(diǎn),導(dǎo)致從節(jié)點(diǎn)上沒有l(wèi)ockkey(發(fā)生概率很小,面試官喜歡在AP模型里解決CP模型的問題)

  • 對(duì)3個(gè)完全獨(dú)立的redis主服務(wù)器一次獲得鎖(一般要基數(shù)個(gè),為了少數(shù)服從多數(shù))
  • 如圖請(qǐng)求時(shí)間4000-1000=3s小于TTL時(shí)間5s,并且至少有半數(shù)(大于2個(gè))獲得鎖,才算真正獲得鎖

缺點(diǎn)(已廢棄,不常用,因此只學(xué)習(xí)算法思想)

  • 復(fù)雜度高,需要設(shè)計(jì)一些算法去實(shí)現(xiàn)
  • 不可靠,如果redis主服務(wù)器宕機(jī),會(huì)影響到鎖的使用(即少數(shù)服從多數(shù)會(huì)受影響)
  • 性能瓶頸,需要訪問多個(gè)redis實(shí)例
  • 另外最要命的是還需要求所有redis主服務(wù)器的系統(tǒng)時(shí)間一致性

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis與RabbitMQ的區(qū)別對(duì)比和結(jié)合應(yīng)用

    Redis與RabbitMQ的區(qū)別對(duì)比和結(jié)合應(yīng)用

    RabbitMQ和Redis是兩種流行的消息隊(duì)列(Message Queue)和緩存系統(tǒng),在應(yīng)用程序開發(fā)中起著不同的角色和功能,Redis憑借內(nèi)存存儲(chǔ)和豐富數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)高速緩存和分布式鎖,RabbitMQ通過消息隊(duì)列實(shí)現(xiàn)系統(tǒng)解耦和異步處理,二者結(jié)合可應(yīng)對(duì)電商秒殺等高并發(fā)場(chǎng)景
    2025-10-10
  • Redis全量復(fù)制與部分復(fù)制示例詳解

    Redis全量復(fù)制與部分復(fù)制示例詳解

    這篇文章主要給大家介紹了關(guān)于Redis全量復(fù)制與部分復(fù)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis爬蟲具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Redis性能大幅提升之Batch批量讀寫詳解

    Redis性能大幅提升之Batch批量讀寫詳解

    這篇文章主要給大家介紹了關(guān)于Redis性能大幅提升之Batch批量讀寫的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • Redis過期數(shù)據(jù)的刪除策略詳解

    Redis過期數(shù)據(jù)的刪除策略詳解

    Redis 是一個(gè)kv型數(shù)據(jù)庫(kù),我們所有的數(shù)據(jù)都是存放在內(nèi)存中的,但是內(nèi)存是有大小限制的,不可能無限制的增量,這篇文章主要介紹了Redis過期數(shù)據(jù)的刪除策略,需要的朋友可以參考下
    2023-08-08
  • 基于Redis位圖實(shí)現(xiàn)系統(tǒng)用戶登錄統(tǒng)計(jì)

    基于Redis位圖實(shí)現(xiàn)系統(tǒng)用戶登錄統(tǒng)計(jì)

    這篇文章主要介紹了基于Redis位圖實(shí)現(xiàn)系統(tǒng)用戶登錄統(tǒng)計(jì),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Redis String 類型和 Hash 類型學(xué)習(xí)筆記與總結(jié)

    Redis String 類型和 Hash 類型學(xué)習(xí)筆記與總結(jié)

    這篇文章主要介紹了Redis String 類型和 Hash 類型學(xué)習(xí)筆記與總結(jié),本文分別對(duì)String 類型的一些方法和Hash 類型做了詳細(xì)介紹,需要的朋友可以參考下
    2015-06-06
  • 如何在centos中安裝redis插件bloom-filter

    如何在centos中安裝redis插件bloom-filter

    布隆過濾器在第一次add的時(shí)候自動(dòng)創(chuàng)建基于默認(rèn)參數(shù)的過濾器,Redis還提供了自定義參數(shù)的布隆過濾器,下面這篇文章主要給大家介紹了關(guān)于如何在centos中安裝redis插件bloom-filter的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 關(guān)于Redis的內(nèi)存淘汰策略詳解

    關(guān)于Redis的內(nèi)存淘汰策略詳解

    當(dāng)內(nèi)存空間使用達(dá)到限制時(shí),Redis 會(huì)根據(jù)配置策略來選擇不同處理方式,要么返回 errors,要么按照不同的策略算法來清除一些舊數(shù)據(jù),達(dá)到回收內(nèi)存的目的,這就是 Redis 的內(nèi)存淘汰,有些文章中,內(nèi)存淘汰也叫緩存回收,需要的朋友可以參考下
    2023-05-05
  • Redis中ServiceStack.Redis和StackExchange.Redis區(qū)別詳解

    Redis中ServiceStack.Redis和StackExchange.Redis區(qū)別詳解

    本文主要介紹了Redis中ServiceStack.Redis和StackExchange.Redis區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Redis配置文件redis.conf詳細(xì)配置說明

    Redis配置文件redis.conf詳細(xì)配置說明

    本文列出了Redis的配置文件redis.conf的各配置項(xiàng)的詳細(xì)說明,簡(jiǎn)單易懂
    2018-03-03

最新評(píng)論

新疆| 枝江市| 太仓市| 壤塘县| 将乐县| 马尔康县| 专栏| 涡阳县| 淮滨县| 平阴县| 靖安县| 稻城县| 平江县| 泰兴市| 德安县| 长子县| 临武县| 开原市| 浪卡子县| 石嘴山市| 花莲县| 元阳县| 隆回县| 耿马| 台南县| 威宁| 株洲县| 伊宁市| 莲花县| 封开县| 乌恰县| 忻州市| 泌阳县| 健康| 阜平县| 胶南市| 城口县| 和政县| 临安市| 于都县| 临桂县|