一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java編程redisson實現分布式鎖代碼示例

Java編程redisson實現分布式鎖代碼示例

2021-01-20 13:54liuyazhuang Java教程

這篇文章主要介紹了Java編程redisson實現分布式鎖代碼示例,小編覺得還是比較不錯的,這里給大家分享下,供需要的朋友參考。

最近由于工作很忙,很長時間沒有更新博客了,今天為大家帶來一篇有關Redisson實現分布式鎖的文章,好了,不多說了,直接進入主題。

1. 可重入鎖(Reentrant Lock)

Redisson的分布式可重入鎖RLock Java對象實現了java.util.concurrent.locks.Lock接口,同時還支持自動過期解鎖。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void testReentrantLock(RedissonClient redisson){
  RLock lock = redisson.getLock("anyLock");
  try{
    // 1. 最常見的使用方法
    //lock.lock();
    // 2. 支持過期解鎖功能,10秒鐘以后自動解鎖, 無需調用unlock方法手動解鎖
    //lock.lock(10, TimeUnit.SECONDS);
    // 3. 嘗試加鎖,最多等待3秒,上鎖以后10秒自動解鎖
    boolean res = lock.tryLock(3, 10, TimeUnit.SECONDS);
    if(res){ //成功
    // do your business
    }
  } catch (InterruptedException e) {
    e.printStackTrace();
  } finally {
    lock.unlock();
  }
}

Redisson同時還為分布式鎖提供了異步執行的相關方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void testAsyncReentrantLock(RedissonClient redisson){
  RLock lock = redisson.getLock("anyLock");
  try{
    lock.lockAsync();
    lock.lockAsync(10, TimeUnit.SECONDS);
    Future<Boolean> res = lock.tryLockAsync(3, 10, TimeUnit.SECONDS);
    if(res.get()){
    // do your business
    }
  } catch (InterruptedException e) {
    e.printStackTrace();
  } catch (ExecutionException e) {
    e.printStackTrace();
  } finally {
    lock.unlock();
  }
}

2. 公平鎖(Fair Lock)

Redisson分布式可重入公平鎖也是實現了java.util.concurrent.locks.Lock接口的一種RLock對象。在提供了自動過期解鎖功能的同時,保證了當多個Redisson客戶端線程同時請求加鎖時,優先分配給先發出請求的線程。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void testFairLock(RedissonClient redisson){
  RLock fairLock = redisson.getFairLock("anyLock");
  try{
    // 最常見的使用方法
    fairLock.lock();
    // 支持過期解鎖功能, 10秒鐘以后自動解鎖,無需調用unlock方法手動解鎖
    fairLock.lock(10, TimeUnit.SECONDS);
    // 嘗試加鎖,最多等待100秒,上鎖以后10秒自動解鎖
    boolean res = fairLock.tryLock(100, 10, TimeUnit.SECONDS);
  } catch (InterruptedException e) {
    e.printStackTrace();
  } finally {
    fairLock.unlock();
  }
}

Redisson同時還為分布式可重入公平鎖提供了異步執行的相關方法:

?
1
2
3
4
RLock fairLock = redisson.getFairLock("anyLock");
fairLock.lockAsync();
fairLock.lockAsync(10, TimeUnit.SECONDS);
Future<Boolean> res = fairLock.tryLockAsync(100, 10, TimeUnit.SECONDS);

3. 聯鎖(MultiLock)

Redisson的RedissonMultiLock對象可以將多個RLock對象關聯為一個聯鎖,每個RLock對象實例可以來自于不同的Redisson實例。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void testMultiLock(RedissonClient redisson1,RedissonClient redisson2, RedissonClient redisson3){
  RLock lock1 = redisson1.getLock("lock1");
  RLock lock2 = redisson2.getLock("lock2");
  RLock lock3 = redisson3.getLock("lock3");
  RedissonMultiLock lock = new RedissonMultiLock(lock1, lock2, lock3);
  try {
    // 同時加鎖:lock1 lock2 lock3, 所有的鎖都上鎖成功才算成功。
    lock.lock();
    // 嘗試加鎖,最多等待100秒,上鎖以后10秒自動解鎖
    boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
  } catch (InterruptedException e) {
    e.printStackTrace();
  } finally {
    lock.unlock();
  }
}

4. 紅鎖(RedLock)

Redisson的RedissonRedLock對象實現了Redlock介紹的加鎖算法。該對象也可以用來將多個RLock對象關聯為一個紅鎖,每個RLock對象實例可以來自于不同的Redisson實例。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void testRedLock(RedissonClient redisson1,RedissonClient redisson2, RedissonClient redisson3){
  RLock lock1 = redisson1.getLock("lock1");
  RLock lock2 = redisson2.getLock("lock2");
  RLock lock3 = redisson3.getLock("lock3");
  RedissonRedLock lock = new RedissonRedLock(lock1, lock2, lock3);
  try {
    // 同時加鎖:lock1 lock2 lock3, 紅鎖在大部分節點上加鎖成功就算成功。
    lock.lock();
    // 嘗試加鎖,最多等待100秒,上鎖以后10秒自動解鎖
    boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
  } catch (InterruptedException e) {
    e.printStackTrace();
  } finally {
    lock.unlock();
  }
}

5. 讀寫鎖(ReadWriteLock)

Redisson的分布式可重入讀寫鎖RReadWriteLock,Java對象實現了java.util.concurrent.locks.ReadWriteLock接口。同時還支持自動過期解鎖。該對象允許同時有多個讀取鎖,但是最多只能有一個寫入鎖。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
RReadWriteLock rwlock = redisson.getLock("anyRWLock");
// 最常見的使用方法
rwlock.readLock().lock();
// 或
rwlock.writeLock().lock();
// 支持過期解鎖功能
// 10秒鐘以后自動解鎖
// 無需調用unlock方法手動解鎖
rwlock.readLock().lock(10, TimeUnit.SECONDS);
// 或
rwlock.writeLock().lock(10, TimeUnit.SECONDS);
// 嘗試加鎖,最多等待100秒,上鎖以后10秒自動解鎖
boolean res = rwlock.readLock().tryLock(100, 10, TimeUnit.SECONDS);
// 或
boolean res = rwlock.writeLock().tryLock(100, 10, TimeUnit.SECONDS);
...
lock.unlock();

6. 信號量(Semaphore)

Redisson的分布式信號量(Semaphore)Java對象RSemaphore采用了與java.util.concurrent.Semaphore相似的接口和用法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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();

7. 可過期性信號量(PermitExpirableSemaphore)

Redisson的可過期性信號量(PermitExpirableSemaphore)實在RSemaphore對象的基礎上,為每個信號增加了一個過期時間。每個信號可以通過獨立的ID來辨識,釋放時只能通過提交這個ID才能釋放。

?
1
2
3
4
5
6
RPermitExpirableSemaphore semaphore = redisson.getPermitExpirableSemaphore("mySemaphore");
String permitId = semaphore.acquire();
// 獲取一個信號,有效期只有2秒鐘。
String permitId = semaphore.acquire(2, TimeUnit.SECONDS);
// ...
semaphore.release(permitId);

8. 閉鎖(CountDownLatch)

Redisson的分布式閉鎖(CountDownLatch)Java對象RCountDownLatch采用了與java.util.concurrent.CountDownLatch相似的接口和用法。

?
1
2
3
4
5
6
RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");
latch.trySetCount(1);
latch.await();
// 在其他線程或其他JVM里
RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");
latch.countDown();

總結

以上就是本文關于Java編程redisson實現分布式鎖代碼示例的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/l1028386804/article/details/73523810

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: eee在线播放成人免费 | 欧美腐剧mm在线观看 | 色哟哟在线资源 | 亚洲国产精品成人久久 | 40岁女人三级全黄 | 国产90后美女露脸在线观看 | 成人免费在线视频 | 日韩在线1 | 99视频福利 | 国产精品免费一级在线观看 | 91国内在线国内在线播放 | 视频在线欧美 | 日韩在线中文字幕 | 色中色软件 | 精品免费国产一区二区三区 | 久草草在线视视频 | 国产三及 | 精品欧美一区二区三区久久久 | 王淑兰李思雨李铁柱乡村小说免费 | 男人和女人全黄一级毛片 | jiuse视频 | 久久国产香蕉 | 日本免费一区二区三区四区五六区 | 黄色大片免费网站 | 好大好湿好硬好爽好深免费视频 | 亚洲第成色999久久网站 | 日韩性公交车上xxhd免费 | 亚洲欧美精品一区二区 | 视频一区二区在线 | 日韩综合久久 | 东北老女人91p0rny | julia ann一hd | 肉文高h调教 | 四虎在线免费 | a天堂视频 | 午夜神器18以下不能进免费 | 黑人好大好硬好深好爽想要h | 日本大学生xxxxx69泡妞 | 亚洲黑人巨大videos0 | sao虎在线精品永久 s0e一923春菜花在线播放 | 亚洲国产精品无圣光一区二区 |