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

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

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

參數(shù)列表:
KEYS[1]:指定的 key 這里叫 semaphore KEYS[2]:redisson_sc:{semaphore} ARGV[1]:憑證數(shù) 3
這塊 lua 腳本相對簡單,直接設(shè)置一個 key 的 value 為 3。

獲取憑證

參數(shù)列表:
KEYS[1]:指定的 key 這里叫 semaphore ARGV[1]:要獲取的憑證數(shù),默認(rèn) 1
這段 lua 腳本就是:
獲取 key semaphore 的值 如果值大于等于 1(要獲取的憑證數(shù)),對值進行遞減 成功返回 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)推薦

評論
圖片
表情
