成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Redisson 分布式鎖源碼之八:MultiLock 加鎖與鎖釋放

開發 前端 分布式 Redis
基于 Redis 的 Redisson 分布式聯鎖 RedissonMultiLock 對象可以將多個 RLock 對象關聯為一個聯鎖,每個 RLock 對象實例可以來自于不同的 Redisson 實例。

[[409055]]

前言

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

當然,這是官網的介紹,具體是什么?一起看看聯鎖 MultiLock 使用以及源碼吧!

1MultiLock 使用

按照官方文檔的說法,這里 Redisson 客戶端可以不是同一個。當然,一般工作中也不會說不用一個客戶端吧。

2加鎖

在閱讀 MultiLock 加鎖之前,小伙伴應該已經閱讀過普通加鎖的相關文章。

源碼入口:org.redisson.RedissonMultiLock#lock()

默認超時時間 leaseTime 沒有設置,所以為 -1。

這塊方法太長,咱們拆分進行閱讀。

  1. 基礎等待時間 baseWaitTime = 鎖數量 * 1500,在這里就是 4500 毫秒;
  2. leaseTime == -1 所以 waitTime = baseWaitTime,也就是 4500;
  3. while (true) 調用 tryLock 加鎖,直到成功。

調用 tryLock 方法,其中參數 waitTime = 4500,leaseTime = -1,unit = MILLISECONDS。

下面看一下 tryLock 里面有什么邏輯?

leaseTime != -1 不滿足,這部分直接跳過。

waitTime != -1 條件滿足,remainTime = 4500,lockWaitTime = 4500。

所以,failedLocksLimit() 這個方法直接返回 0,就是必須全部加鎖成功。

這里才是重點:

遍歷所有的鎖,依次加鎖。

加鎖邏輯就和可重入鎖加鎖并無區別了。所以 Lua 腳本就不進行分析了。

上面就是 tryLock 加鎖之后的結果。

加鎖成功,則將成功的鎖放進 acquiredLocks 集合中;

加鎖失敗,需要判斷 failedLocksLimit,因為這里是 0,所以會直接對成功加鎖集合 acquiredLocks 中的所有鎖執行鎖釋放,同時清空成功集合,恢復迭代器。

每次加鎖之后,會更新鎖剩余時間 remainTime,如果 remainTime 小于等于 0 了,則說明加鎖超時,直接返回 false。

這樣就會執行外部的 while (true) 邏輯,然后重新再走一遍 RedissonMultiLock#tryLock。

3鎖釋放

看完加鎖邏輯,鎖釋放就更容易理解了。

直接遍歷釋放鎖即可,lock.unlockAsync() 是調用的 RedissonBaseLock#unlockAsync() 方法。

4總結

根據我的理解,畫圖如下:

 

總體而言,就是將 key1、key2、key3 …… keyN 放到一個 List 集合中,然后迭代循環加鎖,直到所有的都成功。解鎖的時候就是再遍歷鎖進行釋放鎖。

本文轉載自微信公眾號「程序員小航」,可以通過以下二維碼關注。轉載本文請聯系程序員小航公眾號。

 

責任編輯:武曉燕 來源: 程序員小航
相關推薦

2021-06-30 14:56:12

Redisson分布式公平鎖

2021-07-02 08:51:09

Redisson分布式鎖公平鎖

2021-07-01 09:42:08

Redisson分布式

2021-06-27 21:24:55

RedissonJava數據

2021-07-06 08:37:29

Redisson分布式

2021-07-09 06:48:31

ZooKeeperCurator源碼

2022-08-04 08:45:50

Redisson分布式鎖工具

2021-07-07 07:09:49

Redisson分布式鎖源碼

2022-06-30 08:04:16

Redis分布式鎖Redisson

2021-07-10 10:02:30

ZooKeeperCurator并發

2024-01-02 13:15:00

分布式鎖RedissonRedis

2021-06-28 10:51:55

Redisson分布式鎖Watchdog

2021-07-16 07:57:34

ZooKeeperCurator源碼

2023-08-27 22:13:59

Redisson分布式緩存

2025-03-25 10:29:52

2018-07-17 08:14:22

分布式分布式鎖方位

2021-09-17 07:51:24

RedissonRedis分布式

2018-11-27 16:17:13

分布式Tomcat

2021-11-26 06:43:19

Java分布式

2021-07-08 09:21:17

ZooKeeper分布式鎖 Curator
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色婷婷久久久亚洲一区二区三区 | 亚洲第一天堂 | 精品日韩一区 | 国产精品久久久久久中文字 | 精品一区二区在线观看 | 国产 欧美 日韩 一区 | 久久久久网站 | 亚洲国产精品日韩av不卡在线 | 中文字幕精品一区二区三区精品 | 亚洲国产成人久久久 | 亚洲一区二区三区免费观看 | 日日碰狠狠躁久久躁婷婷 | 国产精品久久精品 | 国产精品国产 | 久久久久亚洲 | 亚洲一区二区在线播放 | 一级毛片视频在线观看 | 欧美精品一区二区三区一线天视频 | 91视频国产一区 | 伊人手机在线视频 | 国产精品欧美一区二区 | 黄色大片视频 | 高清色| 国产成人精品免高潮在线观看 | 亚洲激情综合 | 国产精品日韩在线观看一区二区 | 古典武侠第一页久久777 | 欧美色性 | 欧美激情在线精品一区二区三区 | 最新中文字幕在线 | 欧美一级片黄色 | 男人电影天堂 | 午夜精品久久久久久不卡欧美一级 | 亚洲综合婷婷 | 国产国产精品久久久久 | 久久国产麻豆 | 亚洲精品久久久一区二区三区 | 国产在线观看网站 | 欧美精品一区二区在线观看 | 欧美激情在线精品一区二区三区 | 最近中文字幕免费 |