日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

redis 分布式锁 看门狗_分布式锁Redisson的使用,看门狗机制

發布時間:2025/3/15 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 分布式锁 看门狗_分布式锁Redisson的使用,看门狗机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redisson簡介

Redisson是一個在Redis的基礎上實現的Java駐內存數據網格(In-Memory Data Grid)。它不僅提供了一系列的分布式的Java常用對象,還提供了許多分布式服務。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最簡單和最便捷的方法。Redisson的宗旨是促進使用者對Redis的關注分離(Separation of Concern),從而讓使用者能夠將精力更集中地放在處理業務邏輯上。

Redisson使用

1.引入依賴

org.redisson

redisson

3.12.0

2.編寫配置類,初始化一個RedissonClient對象

import org.redisson.Redisson;

import org.redisson.api.RedissonClient;

import org.redisson.config.Config;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import java.io.IOException;

/**

* @ClassName MyRedissonConfig.java

* @Author 拾光

* @Date 2020年07月25日 18:14:00

* @Description redisson配置類

*/

@Configuration

public class MyRedissonConfig {

/**

* 所有對redisson的使用都是通過RedissonClient來使用

* @return

* @throws IOException

*/

@Bean(destroyMethod="shutdown")

public RedissonClient redisson() throws IOException {

//1 創建配置

Config config = new Config();

config.useSingleServer().setAddress("redis://10.211.55.5:6379");

//2.根據Config創建出RedissonClient

return Redisson.create(config);

}

}

以上方式為但節點模式,也可以配置集群模式:

Config config = new Config();

config.useClusterServers()

.setScanInterval(2000) // 集群狀態掃描間隔時間,單位是毫秒

//可以用"rediss://"來啟用SSL連接

.addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")

.addNodeAddress("redis://127.0.0.1:7002");

RedissonClient redisson = Redisson.create(config);

3.使用分布式鎖進行redis占鎖

@Autowired

RedissonClient redisson;

最常見的使用方法:

RLock lock = redisson.getLock("my-lock");

// 最常見的使用方法

lock.lock();

解釋說明

使用基本鎖以后,redisson使用了自動續期,如果業務超長,運行期間自動續上30s,不用擔心業務時間長,鎖自動過期被刪掉。

大家都知道,如果負責儲存這個分布式鎖的Redisson節點宕機以后,而且這個鎖正好處于鎖住的狀態時,這個鎖會出現鎖死的狀態。為了避免這種情況的發生,Redisson內部提供了一個監控鎖的看門狗,它的作用是在Redisson實例被關閉前,不斷的延長鎖的有效期。默認情況下,看門狗的檢查鎖的超時時間是30秒鐘,也可以通過修改Config.lockWatchdogTimeout來另行指定。

另外Redisson還通過加鎖的方法提供了leaseTime的參數來指定加鎖的時間。超過這個時間后鎖便自動解開了。

// 加鎖以后10秒鐘自動解鎖

// 無需調用unlock方法手動解鎖

lock.lock(10, TimeUnit.SECONDS);

// 嘗試加鎖,最多等待100秒,上鎖以后10秒自動解鎖

boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);

if (res) {

try {

...

} finally {

lock.unlock();

}

}

項目使用以及說明

public String hello(){

//獲取一把鎖,只要鎖的名字一樣就是同一把鎖

RLock lock = redisson.getLock("my-lock");

//2。加鎖

// lock.lock();

//1).redisson的自動續期,如果業務超長,運行期間自動續上30s,不用擔心業務時間長,鎖自動過期被刪掉

//2).加鎖得業務只要運行完成,就不會給當前鎖續期,即使不手動解鎖,鎖默認在30s后自動刪除

lock.lock(10, TimeUnit.SECONDS);//10秒以后自動解鎖,自動解鎖時間一定要大于業務時間

// lock.lock(10, TimeUnit.SECONDS)在鎖時間到了以后,不會自動續期

//1.如果我們傳遞了鎖的超時時間,就發送給redis執行腳本,進行站鎖,默認時間就是我我們傳遞的時間

//2.如果我們危制定鎖的超時時間,就使用lockWatchdogTimeout = 30 * 1000;看門狗默認時間

//只要站鎖成功,就會啟動定時任務(重新給鎖設置過期時間)新的時間就是看門狗的默認時間,每10秒,都會自動續期續成滿時間

//最佳實戰

//1)lock.lock(10, TimeUnit.SECONDS) 省略了整個續期操作,手動解鎖

try {

System.out.println("加鎖成功,執行業務"+lock.getName());

Thread.sleep(30000);

} catch (Exception e){

System.out.println(e);

} finally{

//解鎖

System.out.println("釋放鎖"+lock.getName());

lock.unlock();

}

return "hello";

}

本文地址:https://blog.csdn.net/weixin_43691942/article/details/107591137

如您對本文有疑問或者有任何想說的,請點擊進行留言回復,萬千網友為您解惑!

總結

以上是生活随笔為你收集整理的redis 分布式锁 看门狗_分布式锁Redisson的使用,看门狗机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。