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

Zookeeper實(shí)現(xiàn)分布式鎖

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

ZooKeeper是一個(gè)分布式協(xié)調(diào)服務(wù),其中提供的序列化、持久化、有層次的目錄結(jié)構(gòu)使得它非常適合用于實(shí)現(xiàn)分布式鎖。在ZooKeeper中,分布式鎖通常通過臨時(shí)有序節(jié)點(diǎn)實(shí)現(xiàn)。以下是ZooKeeper分布式鎖的詳細(xì)介紹:

?實(shí)現(xiàn)方式:

  • 臨時(shí)有序節(jié)點(diǎn):

    • 當(dāng)一個(gè)客戶端需要獲取鎖時(shí),它在ZooKeeper上創(chuàng)建一個(gè)臨時(shí)有序節(jié)點(diǎn),節(jié)點(diǎn)的名稱包含一個(gè)自增的序列號(hào)。
    • 客戶端創(chuàng)建節(jié)點(diǎn)的過程相當(dāng)于嘗試獲取鎖。
  • 鎖競爭:

    • 客戶端創(chuàng)建節(jié)點(diǎn)后,檢查它是否是當(dāng)前目錄中最小的節(jié)點(diǎn),如果是,則表示它獲取了鎖。
    • 如果不是最小的節(jié)點(diǎn),客戶端監(jiān)聽上一個(gè)節(jié)點(diǎn),等待上一個(gè)節(jié)點(diǎn)釋放鎖。
  • 鎖釋放:

    • 當(dāng)客戶端不再需要鎖時(shí),它刪除相應(yīng)的節(jié)點(diǎn),其他等待的客戶端會(huì)收到通知,重新嘗試獲取鎖。

本篇文章基于Redis之高并發(fā)超賣問題解決方案_redis解決超賣 高并發(fā)-CSDN博客,在嘗試使用redisson實(shí)現(xiàn)分布式鎖后,這里嘗試使用zookeeper實(shí)現(xiàn)分布式鎖。

Zookeeper實(shí)現(xiàn)分布式鎖,Zookeeper,分布式,zookeeper,云原生

?代碼如下:

導(dǎo)入依賴:

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.0</version>
        </dependency>

秒殺接口測試:

在redis中設(shè)計(jì)product_1:200

@RestController
public class MyController {
  

    private static InterProcessMutex lock; //可重入鎖

    @PostConstruct
    public void init(){
        RetryPolicy retry = new ExponentialBackoffRetry(3000,10);
        CuratorFramework curatorFramework = CuratorFrameworkFactory.builder()
                .connectString("localhost:2181")
                .retryPolicy(retry)
                .build();
        curatorFramework.start();
         lock= new InterProcessMutex(curatorFramework, "/lock");

    }

    @RequestMapping("/buy/{id}")
    public String buy(@PathVariable("id") Long id){
        String message="error";
        String key="product_" + id;
        //try catch 設(shè)計(jì)是為了防止在執(zhí)行業(yè)務(wù)的時(shí)候出現(xiàn)異常導(dǎo)致redis鎖一直無法釋放
        try {
            //加鎖
            lock.acquire();
            int count = Integer.parseInt(stringRedisTemplate.opsForValue().get(key));
            if (count > 0) {
                stringRedisTemplate.opsForValue().set(key, String.valueOf(--count));
                System.out.println(key + "商品購買成功,剩余庫存" + count);
                message="success";
            }
        }catch (Throwable e){
            e.printStackTrace();
        }finally {
            try {
                //解鎖
                lock.release();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if(message.equals("error"))
            System.out.println(key+"商品庫存不足");
        return message;
    }
}

jmeter壓測結(jié)果如下:

Zookeeper實(shí)現(xiàn)分布式鎖,Zookeeper,分布式,zookeeper,云原生

?Zookeeper實(shí)現(xiàn)分布式鎖,Zookeeper,分布式,zookeeper,云原生文章來源地址http://www.zghlxwxcb.cn/news/detail-787672.html

到了這里,關(guān)于Zookeeper實(shí)現(xiàn)分布式鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 分布式鎖實(shí)現(xiàn)方案-基于zookeeper的分布式鎖實(shí)現(xiàn)(原理與代碼)

    分布式鎖實(shí)現(xiàn)方案-基于zookeeper的分布式鎖實(shí)現(xiàn)(原理與代碼)

    目錄 一、基于zookeeper的分布式鎖 1.1 基于Zookeeper實(shí)現(xiàn)分布式鎖的原理 1.1.1 分布式鎖特性說明 1.1.1.1 特點(diǎn)分析 1.1.1.2 本質(zhì) 1.1.2 Zookeeper 分布式鎖實(shí)現(xiàn)原理 1.1.2.1 Zookeeper臨時(shí)順序節(jié)點(diǎn)特性 1.1.2.2 Zookeeper滿足分布式鎖基本要求 1.1.2.3 Watcher機(jī)制 1.1.2.3 總結(jié) 1.2 分布式鎖流程說明 1.2.1

    2024年04月24日
    瀏覽(28)
  • Zookeeper實(shí)戰(zhàn)——分布式鎖實(shí)現(xiàn)以及原理

    Zookeeper實(shí)戰(zhàn)——分布式鎖實(shí)現(xiàn)以及原理

    分布式鎖是控制分布式系統(tǒng)之間同步訪問共享資源的一種方式。分布式鎖的實(shí)現(xiàn)方式有很多種,比如 Redis 、數(shù)據(jù)庫 、 zookeeper 等。這篇文章主要介紹用 Zookeeper 實(shí)現(xiàn)分布式鎖。 先說結(jié)論: Zookeeper 是基于臨時(shí)順序節(jié)點(diǎn)以及 Watcher 監(jiān)聽器機(jī)制實(shí)現(xiàn)分布式鎖的 。 (1)ZooKeeper 的每

    2023年04月08日
    瀏覽(17)
  • springboot 使用zookeeper實(shí)現(xiàn)分布式鎖

    一.添加ZooKeeper依賴:在pom.xml文件中添加ZooKeeper客戶端的依賴項(xiàng)。例如,可以使用Apache Curator作為ZooKeeper客戶端庫: 二.創(chuàng)建ZooKeeper連接:在應(yīng)用程序的配置文件中,配置ZooKeeper服務(wù)器的連接信息。例如,在application.properties文件中添加以下配置: 三.創(chuàng)建分布式鎖:使用ZooKee

    2024年02月13日
    瀏覽(23)
  • SpringBoot基于Zookeeper實(shí)現(xiàn)分布式鎖

    SpringBoot基于Zookeeper實(shí)現(xiàn)分布式鎖

    研究分布式鎖,基于ZK實(shí)現(xiàn),需要整合到SpringBoot使用 參考自SpringBoot集成Curator實(shí)現(xiàn)Zookeeper基本操作,Zookeeper入門 本篇的代碼筆者有自己運(yùn)行過,需要注意組件的版本號(hào)是否兼容,否則會(huì)有比較多的坑 采用Docker compose快速搭建ZK容器,很快,幾分鐘就好了,而且是集群方式搭建

    2024年02月12日
    瀏覽(24)
  • springboot 使用zookeeper實(shí)現(xiàn)分布式隊(duì)列

    一.添加ZooKeeper依賴:在pom.xml文件中添加ZooKeeper客戶端的依賴項(xiàng)。例如,可以使用Apache Curator作為ZooKeeper客戶端庫: 二.創(chuàng)建ZooKeeper連接:在應(yīng)用程序的配置文件中,配置ZooKeeper服務(wù)器的連接信息。例如,在application.properties文件中添加以下配置:? 三.創(chuàng)建分布式隊(duì)列:使用Z

    2024年02月13日
    瀏覽(25)
  • 【分布式鎖】06-Zookeeper實(shí)現(xiàn)分布式鎖:可重入鎖源碼分析

    前言 前面已經(jīng)講解了Redis的客戶端Redission是怎么實(shí)現(xiàn)分布式鎖的,大多都深入到源碼級(jí)別。 在分布式系統(tǒng)中,常見的分布式鎖實(shí)現(xiàn)方案還有Zookeeper,接下來會(huì)深入研究Zookeeper是如何來實(shí)現(xiàn)分布式鎖的。 Zookeeper初識(shí) 文件系統(tǒng) Zookeeper維護(hù)一個(gè)類似文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu) image.png 每

    2024年02月22日
    瀏覽(19)
  • springboot 使用zookeeper實(shí)現(xiàn)分布式ID

    添加ZooKeeper依賴:在pom.xml文件中添加ZooKeeper客戶端的依賴項(xiàng)。例如,可以使用Apache Curator作為ZooKeeper客戶端庫: 創(chuàng)建ZooKeeper連接:在應(yīng)用程序的配置文件中,配置ZooKeeper服務(wù)器的連接信息。例如,在application.properties文件中添加以下配置: 創(chuàng)建分布式ID生成器:使用ZooKeeper客

    2024年02月13日
    瀏覽(28)
  • 實(shí)現(xiàn)分布式鎖:Zookeeper vs Redis

    目錄 引言 1. Zookeeper分布式鎖 1.1特點(diǎn)和優(yōu)勢: 強(qiáng)一致性 順序節(jié)點(diǎn) Watch機(jī)制 1.2 Zookeeper分布式鎖代碼示例 2. Redis分布式鎖 2.1特點(diǎn)和優(yōu)勢: 簡單高效 可續(xù)租性 靈活性 2.2Redis分布式鎖代碼示例 3.對(duì)比和選擇 3.1??一致性要求 3.2??適用場景 3.3 性能和復(fù)雜度 結(jié)論 在分布式系統(tǒng)中,

    2024年01月22日
    瀏覽(25)
  • ZooKeeper 實(shí)戰(zhàn)(五) Curator實(shí)現(xiàn)分布式鎖

    ZooKeeper 實(shí)戰(zhàn)(五) Curator實(shí)現(xiàn)分布式鎖

    1.1.分布式鎖概念 分布式鎖是一種用于實(shí)現(xiàn)分布式系統(tǒng)中的同步機(jī)制的技術(shù)。它允許在多個(gè)進(jìn)程或線程之間實(shí)現(xiàn)互斥訪問共享資源,以避免并發(fā)訪問時(shí)的數(shù)據(jù)不一致問題。分布式鎖的主要目的是在分布式系統(tǒng)中提供類似于全局鎖的效果,以確保在任何時(shí)刻只有一個(gè)進(jìn)程或線程

    2024年01月18日
    瀏覽(23)
  • ZooKeeper分布式鎖的實(shí)現(xiàn)與應(yīng)用

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

    2024年02月02日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包