<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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ù)),對值進行遞減
          3. 成功返回 1,失敗返回 0

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

          釋放憑證

          釋放憑證直接對 Redis key 的值進行自增即可。

          2

          CountDownLatch

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

          源碼分析

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

          這塊都大同小異。

          減少門閂數(shù)量

          就是對這個值進行遞減。

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

          3

          總結(jié)

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


          - <End /> -




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



          瀏覽 51
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.黄色毛片 | 欧美性猛交ⅩXXX富婆 | 国产黄色视频免费 | 三级理论网站 | 污污污啪啪啪 |