1. 程式人生 > 其它 >Redisson訊號量和可過期性訊號量

Redisson訊號量和可過期性訊號量

技術標籤:Redis

一、訊號量概述

Redisson的分散式訊號量(Semaphore)Java物件 RSemaphore 採用了與 java.util.concurrent.Semaphore 相似的介面和用法。同時還提供了非同步(Async)、反射式(Reactive)和RxJava2標準的介面

1.1 實踐
RSemaphore semaphore = redisson.getSemaphore("semaphore");
semaphore.acquire();
//或
semaphore.acquireAsync();
semaphore.acquire(23);
semaphore.tryAcquire();
//或
semaphore.tryAcquireAsync();
semaphore.tryAcquire(23, TimeUnit.SECONDS);
//或
semaphore.tryAcquireAsync(23, TimeUnit.SECONDS);
semaphore.release(10);
semaphore.release();
//或
semaphore.releaseAsync();

二、可過期性訊號量概述

Redisson可過期性訊號量(PermitExpirableSemaphore)是在RSemaphore物件的基礎上,為每個訊號增加了一個過期時間。每個訊號可以通過獨立的ID來辨識,釋放時只能通過提交這個ID才能釋放。它提供了非同步(Async)、反射式(Reactive)和RxJava2標準的介面。

2.1 實踐
RPermitExpirableSemaphore semaphore = redisson.getPermitExpirableSemaphore("mySemaphore");
String permitId = semaphore.acquire();
// 獲取一個訊號,有效期只有2秒鐘。
String permitId = semaphore.acquire(2, TimeUnit.SECONDS);
// ...
semaphore.release(permitId)```