springBoot集成redisson,以及redisson常用的方法

本文主要介紹redisson的分佈式鎖,其他功能請查看redisson的中文文檔apihttps://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95

首先導入redisson的依賴

      <!--redisson-->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.11.6</version>
        </dependency>

編寫redisson的配置文件

我們項目中使用的是阿里雲的redis ,其他配置文件都是採用redisson默認的,因爲是dev環境,採用的是單機版redis,圖中我圈住的地方就是單機版redisson採用的server,主從,集羣版請才用其他server,設置ssl鏈接的格式爲:redis://IP地址:端口號,有密碼的話後面serpassword();

下面是redisson常用的分佈式鎖方法

RLock(可重入鎖):

public void lock(String name) throws InterruptedException {
        //獲得name的鎖
        RLock lock = redissonClient.getLock(name);
        //對name進行加鎖 線程會一直等待 直到拿到該鎖
        lock.lock();
        //嘗試對name進行加鎖,線程會一直等待 直到拿到該鎖 然後10秒後自動解鎖
        lock.lock(10L,TimeUnit.SECONDS);
        //對name進行解鎖,如果鎖不是該線程持有則會拋出異常
        lock.unlock();
        //強制對name進行解鎖,即此鎖不論是那個線程持有都會進行解鎖
        lock.forceUnlock();

        //嘗試對name進行加鎖,如果該鎖被其他線程持有,會等待10秒,然後返回是否成功,如果成功 會在20秒後自動解鎖
        boolean b = lock.tryLock(10L, 20L, TimeUnit.SECONDS);

        //嘗試對name進行加鎖 立即返回加鎖狀態 如果加鎖成功會在20秒後自動解鎖
        boolean b1 = lock.tryLock(20L, TimeUnit.SECONDS);
        //檢查該鎖是否被任何線程所持有
        boolean locked = lock.isLocked();
        //檢查該鎖是否當前線程持有
        boolean heldByCurrentThread = lock.isHeldByCurrentThread();
        //當前線程對該鎖的保持次數
        int holdCount = lock.getHoldCount();
        //該鎖的剩餘時間
        long l = lock.remainTimeToLive();
    }

以上是可重入鎖的常用方法,FLock(公平鎖)的使用方式跟以上一樣

其他鎖相關概念:

MultiLock(聯鎖):基於Redis的Redisson分佈式聯鎖RedissonMultiLock對象可以將多個RLock對象關聯爲一個聯鎖,每個RLock對象實例可以來自於不同的Redisson實例(同時加鎖,所有鎖都加成功纔算成功)

RedLock(紅鎖):基於Redis的Redisson紅鎖RedissonRedLock對象實現了Redlock介紹的加鎖算法。該對象也可以用來將多個RLock對象關聯爲一個紅鎖,每個RLock對象實例可以來自於不同的Redisson實例。(同時加鎖,大部分鎖加鎖成功纔算成功)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章