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

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

這篇具有很好參考價值的文章主要介紹了Zookeeper 和 Redis 哪種更好? 為什么使用分布式鎖? 1. 利用 Redis 提供的 第二種,基于 ZK 實現(xiàn)分布式鎖的落地方案 對于 redis 的分布式鎖而言,它有以下缺點(diǎn):。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Zookeeper 和 Redis 哪種更好?

關(guān)于這個問題,我們 可以從 3 個方面來說:

為什么使用分布式鎖?

使用分布式鎖的目的,是為了保證同一時間只有一個 JVM 進(jìn)程可以對共享資源進(jìn)行操作。
根據(jù)鎖的用途可以細(xì)分為以下兩類:
允許多個客戶端操作共享資源,我們稱為共享鎖
這種鎖的一般是對共享資源具有冪等性操作的場景,主要是為了避免重復(fù)操作共享資源頻繁加鎖帶來的性能開銷。
只允許一個客戶端操作共享資源,我們成為排他鎖
這種鎖一般是用在對共享資源操作具有非冪等性操作的場景,也就是需要保證在同一時刻只有一個進(jìn)程或者線程能夠訪問這個共享資源。
目前實現(xiàn)分布式鎖最常用的中間件是 Redis 和 Zookeeper
第一種,Redis 可以通過兩種方式來實現(xiàn)

1. 利用 Redis 提供的

指令,這個指令是設(shè)置一個

key-value,如果 key 已經(jīng)存在,則返回 0,否則返回 1,我們基于這個返回值來判斷鎖的占用情況從而實現(xiàn)分布式鎖。
2. 基于 Redission 客戶端來實現(xiàn)分布式鎖,Redisson 提供了分布式鎖的封裝方法,我們只需要調(diào)用 api 中的 lock()和 unlock() 方法。它幫我們封裝鎖實現(xiàn)的細(xì)節(jié)和復(fù)雜度之后,每隔 10 秒幫你把 key 的超時時間設(shè)為 30s,就算一直持有鎖也不會出現(xiàn)key 過期了?!翱撮T狗”的邏輯保證了沒有死鎖發(fā)生。

第二種,基于 ZK 實現(xiàn)分布式鎖的落地方案

Zookeeper 實現(xiàn)分布式鎖的方法比較多,我們可以使用有序節(jié)點(diǎn)來實現(xiàn),

1、來看這個圖,每個線程或進(jìn)程在 Zookeeper 上的/lock 目錄下創(chuàng)建一個臨時有
序的節(jié)點(diǎn)表示去搶占鎖,所有創(chuàng)建的節(jié)點(diǎn)會按照先后順序生成一個帶有序編號的節(jié)點(diǎn)。
2、線程創(chuàng)建節(jié)點(diǎn)后,獲取/lock 節(jié)點(diǎn)下的所有子節(jié)點(diǎn),判斷當(dāng)前線程創(chuàng)建的節(jié)點(diǎn)是否是所有的節(jié)點(diǎn)的序號最小的。
3、如果當(dāng)前線程創(chuàng)建的節(jié)點(diǎn)是所有節(jié)點(diǎn)序號最小的節(jié)點(diǎn),則認(rèn)為獲取鎖成功。
4、如果當(dāng)前線程創(chuàng)建的節(jié)點(diǎn)不是所有節(jié)點(diǎn)序號最小的節(jié)點(diǎn),則對節(jié)點(diǎn)序號的前一個節(jié)點(diǎn)添加一個事件監(jiān)聽,當(dāng)前一個被監(jiān)聽的節(jié)點(diǎn)釋放鎖之后,觸發(fā)回調(diào)通知, 從而再次去嘗試搶占鎖。
兩種方案都有各自的優(yōu)缺點(diǎn)

對于 redis 的分布式鎖而言,它有以下缺點(diǎn):

l 它獲取鎖的方式簡單粗暴,如果獲取不到鎖,會不斷嘗試獲取鎖,比較消耗性能。
l Redis 是 AP 模型,在集群模式中由于數(shù)據(jù)的一致性會導(dǎo)致鎖出現(xiàn)問題,即便使用 Redlock 算法來實現(xiàn),在某些復(fù)雜場景下,也無法保證其實現(xiàn) 100%的可靠性。
不過在實際開發(fā)中使用 Redis 實現(xiàn)分布式鎖還是比較常見,而且大部分場情況下不會遇到”極端復(fù)雜的場景“,更重要的是 Redis 性能很高,在高并發(fā)場景中比較合適。
對于 zk 分布式鎖而言:
l zookeeper 天生設(shè)計定位就是分布式協(xié)調(diào),強(qiáng)一致性。鎖的模型健壯、簡單易用、適合做分布式鎖。
l 如果獲取不到鎖,只需要添加一個監(jiān)聽器就可以了,不用一直輪詢,性能消耗較小。
如果要在兩者之間做選擇,就我個人而言的話,比較推崇 ZK 實現(xiàn)的鎖,因為對于分布式鎖而言,它應(yīng)該符合 CP 模型,但是 Redis 是 AP 模型,所以在這個點(diǎn)上,Zookeeper 會更加合適。文章來源地址http://www.zghlxwxcb.cn/news/detail-793620.html

到了這里,關(guān)于Zookeeper 和 Redis 哪種更好? 為什么使用分布式鎖? 1. 利用 Redis 提供的 第二種,基于 ZK 實現(xiàn)分布式鎖的落地方案 對于 redis 的分布式鎖而言,它有以下缺點(diǎn):的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Redis】-使用Lua腳本解決多線程下的超賣問題以及為什么?

    【Redis】-使用Lua腳本解決多線程下的超賣問題以及為什么?

    一.多線程下引起的超賣問題呈現(xiàn) 1.1.我先初始化庫存數(shù)量為1、訂單數(shù)量為0 1.2.然后我開啟3個線程去執(zhí)行業(yè)務(wù) 業(yè)務(wù)為:判斷如果說庫存數(shù)量大于0,則庫存減1,訂單數(shù)量加1 結(jié)果為:庫存為-2,訂單數(shù)量為3 原因:如下圖所示,這是因為分別有6個指令(3個庫存減1指令,3個訂單

    2024年02月03日
    瀏覽(24)
  • ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?

    ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?

    ZooKeeper 是一個開源的分布式協(xié)調(diào)服務(wù)框架,你也可以認(rèn)為它是一個可以保證一致性的分布式(小量)存儲系統(tǒng)。特別適合存儲一些公共的配置信息、集群的一些元數(shù)據(jù)等等。 它有持久節(jié)點(diǎn)和臨時節(jié)點(diǎn),而臨時節(jié)點(diǎn)這個玩意再配合 Watcher 機(jī)制就很有用。 當(dāng)創(chuàng)建臨時節(jié)點(diǎn)的客戶端

    2024年02月06日
    瀏覽(14)
  • Redis—Redis介紹(是什么/為什么快/為什么做MySQL緩存等)

    Redis—Redis介紹(是什么/為什么快/為什么做MySQL緩存等)

    一、Redis是什么 Redis 是一種 基于內(nèi)存的數(shù)據(jù)庫 ,對數(shù)據(jù)的讀寫操作都是在內(nèi)存中完成,因此讀寫速度非???,常用于 緩存,消息隊列、分布式鎖等場景 。 ????????Redis 提供了多種數(shù)據(jù)類型來支持不同的業(yè)務(wù)場景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、

    2024年02月10日
    瀏覽(29)
  • 【Redis】redis為什么快

    【Redis】redis為什么快

    ??? ? ?? 個人博客: 個人主頁 ?? 個人專欄: Redis ? ???? 功不唐捐,玉汝于成 ? 目錄 前言 正文 結(jié)語 ?我的其他博客 在當(dāng)今的計算機(jī)應(yīng)用領(lǐng)域,數(shù)據(jù)存儲和高性能訪問成為系統(tǒng)設(shè)計中至關(guān)重要的一環(huán)。Redis以其卓越的性能、簡潔而強(qiáng)大的設(shè)計原則,成為眾多開發(fā)者和

    2024年01月25日
    瀏覽(33)
  • Redis的速度不夠用?為什么你應(yīng)該考慮使用 KeyDB,一個更快、更強(qiáng)大、更靈活的開源數(shù)據(jù)庫

    Redis的速度不夠用?為什么你應(yīng)該考慮使用 KeyDB,一個更快、更強(qiáng)大、更靈活的開源數(shù)據(jù)庫

    你是否正在使用?Redis?作為您的數(shù)據(jù)結(jié)構(gòu)存儲,享受它的高性能、高可用的特性?如果是這樣,那么你可能會對?KeyDB?感興趣。 KeyDB?一個由?Snap?提供支持、專為擴(kuò)展而構(gòu)建的開源數(shù)據(jù)庫。它是?Redis?的高性能分支,專注于多線程、內(nèi)存效率和高吞吐量。KeyDB?采用?MVCC?體系

    2024年02月08日
    瀏覽(31)
  • 【Redis】為什么要學(xué) Redis

    【Redis】為什么要學(xué) Redis

    關(guān)于為什么要學(xué) Redis 這個問題,一個字就可以回答,那就是:快! Redis是一個將數(shù)據(jù)儲存到內(nèi)存中的非關(guān)系型數(shù)據(jù)庫,它是以鍵值對的形式來組織數(shù)據(jù)的,一般可以用作內(nèi)存數(shù)據(jù)庫、緩存、消息隊列等。 使用 Redis 的主要原因就是因為它的快,但是它的快是相對于 MySQL 等這樣

    2024年02月09日
    瀏覽(17)
  • redis為什么快

    ? 內(nèi)存存儲:Redis 主要將數(shù)據(jù)存儲在內(nèi)存中,內(nèi)存的讀寫速度遠(yuǎn)高于磁盤存儲。這使得 Redis 能夠快速地響應(yīng)讀寫請求,適用于對讀寫性能要求較高的場景。 單線程模型:Redis 使用單線程模型來處理客戶端請求,避免了多線程間的鎖競爭和上下文切換開銷。雖然單線程模型在

    2024年01月19日
    瀏覽(24)
  • Redis為什么快?

    redis是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。和Memcached類似。redis支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。 它的速度快主要?dú)w功于以下幾個方面: 內(nèi)存

    2023年04月26日
    瀏覽(69)
  • 為什么要用redis

    就是把你一些復(fù)雜操作耗時查出來的結(jié)果(用了600ms),如果確定后面不咋變了,然后但是馬上還有很多讀請求,那么直接結(jié)果放緩存(6ms),后面直接讀緩存就好了。 這樣,性能就提升了100倍 說白了就是,用redis擋訪問,高并發(fā)的訪問,不讓mysql掛了。 mysql這么重的數(shù)據(jù)庫,壓根

    2024年02月12日
    瀏覽(34)
  • Redis為什么能如此之快

    Redis,一個以超高的性能和強(qiáng)大 的數(shù)據(jù)結(jié)構(gòu)功能著稱的內(nèi)存數(shù)據(jù)庫,在處理各種復(fù)雜數(shù)據(jù)操作時,速度卻能達(dá)到驚人的水平。那么,Redis為什么能如此之快呢?今天,我們就來深入解析一下Redis的線程模型,揭開這個問題的神秘面紗。 在探討Redis的線程模型之前,我們首先需要

    2024年02月12日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包