1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Redisson 分布式鎖源碼 11:Semaphore 和 CountDownLatch

        共 855字,需瀏覽 2分鐘

         ·

        2021-07-07 13:18

        前言

        Redisson 除了提供了分布式鎖之外,還額外提供了同步組件,Semaphore 和 CountDownLatch。

        1

        Semaphore

        意思就是在分布式場景下,只有 3 個憑證,也就意味著同時只會有三個線程執(zhí)行業(yè)務(wù)。

        設(shè)置憑證

        參數(shù)列表:

        1. KEYS[1]:指定的 key 這里叫 semaphore
        2. KEYS[2]:redisson_sc:{semaphore}
        3. ARGV[1]:憑證數(shù) 3

        這塊 lua 腳本相對簡單,直接設(shè)置一個 key 的 value 為 3。

        獲取憑證

        參數(shù)列表:

        1. KEYS[1]:指定的 key 這里叫 semaphore
        2. ARGV[1]:要獲取的憑證數(shù),默認(rèn) 1

        這段 lua 腳本就是:

        1. 獲取 key semaphore 的值
        2. 如果值大于等于 1(要獲取的憑證數(shù)),對值進(jìn)行遞減
        3. 成功返回 1,失敗返回 0

        如果成功獲取憑證,直接返回,沒有獲取到憑證,則自旋等待。

        釋放憑證

        釋放憑證直接對 Redis key 的值進(jìn)行自增即可。

        2

        CountDownLatch

        輸出內(nèi)容如下:

        源碼分析

        設(shè)置門閂數(shù)量

        這塊都大同小異。

        減少門閂數(shù)量

        就是對這個值進(jìn)行遞減。

        latch.await() 就是自旋獲取門閂的值,直到為 0 了,然后繼續(xù)往下執(zhí)行。

        3

        總結(jié)

        Redisson 實現(xiàn)分布式的 Semaphore 和 CountDownLatch 基本內(nèi)容就是如此,僅僅通過在 Redis 維護(hù)一個公共的變量,然后進(jìn)行原子更新即可。


        - <End /> -




        歷史文章 | 相關(guān)推薦



        瀏覽 51
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            女人扒下男生裤子摸j | 国产精品久久..4399 | 91麻豆天美传媒在线观看 | 成人在线视频毛片 | 男人日女人视频软件 | 绿帽社视频一区自拍 | 福利午夜国语一区二区 | 黄色视频网站免费在线观看 | 美女日逼免费视频 | 96精品久久久久久久久久 |