Redisson 分布式鎖源碼 11:Semaphore 和 CountDownLatch
前言
Redisson 除了提供了分布式鎖之外,還額外提供了同步組件,Semaphore 和 CountDownLatch。
1、Semaphore
意思就是在分布式場景下,只有 3 個憑證,也就意味著同時只會有三個線程執(zhí)行業(yè)務。
設置憑證
參數(shù)列表:
- KEYS[1]:指定的 key 這里叫 semaphore
- KEYS[2]:redisson_sc:{semaphore}
- ARGV[1]:憑證數(shù) 3
這塊 lua 腳本相對簡單,直接設置一個 key 的 value 為 3。
獲取憑證
參數(shù)列表:
- KEYS[1]:指定的 key 這里叫 semaphore
- ARGV[1]:要獲取的憑證數(shù),默認 1
這段 lua 腳本就是:
- 獲取 key semaphore 的值
- 如果值大于等于 1(要獲取的憑證數(shù)),對值進行遞減
- 成功返回 1,失敗返回 0
如果成功獲取憑證,直接返回,沒有獲取到憑證,則自旋等待。
釋放憑證
釋放憑證直接對 Redis key 的值進行自增即可。
2、CountDownLatch
輸出內(nèi)容如下:
源碼分析
設置門閂數(shù)量
這塊都大同小異。
減少門閂數(shù)量
就是對這個值進行遞減。
而 latch.await() 就是自旋獲取門閂的值,直到為 0 了,然后繼續(xù)往下執(zhí)行。
3、總結
Redisson 實現(xiàn)分布式的 Semaphore 和 CountDownLatch 基本內(nèi)容就是如此,僅僅通過在 Redis 維護一個公共的變量,然后進行原子更新即可。
本文轉載自微信公眾號「程序員小航」,可以通過以下二維碼關注。轉載本文請聯(lián)系程序員小航公眾號。