日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/3/15 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 分布式锁 看门狗_分布式锁Redisson的使用,看门狗机制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Redisson簡(jiǎn)介

Redisson是一個(gè)在Redis的基礎(chǔ)上實(shí)現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格(In-Memory Data Grid)。它不僅提供了一系列的分布式的Java常用對(duì)象,還提供了許多分布式服務(wù)。其中包括(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的最簡(jiǎn)單和最便捷的方法。Redisson的宗旨是促進(jìn)使用者對(duì)Redis的關(guān)注分離(Separation of Concern),從而讓使用者能夠?qū)⒕Ω械胤旁谔幚順I(yè)務(wù)邏輯上。

Redisson使用

1.引入依賴

org.redisson

redisson

3.12.0

2.編寫配置類,初始化一個(gè)RedissonClient對(duì)象

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 {

/**

* 所有對(duì)redisson的使用都是通過(guò)RedissonClient來(lái)使用

* @return

* @throws IOException

*/

@Bean(destroyMethod="shutdown")

public RedissonClient redisson() throws IOException {

//1 創(chuàng)建配置

Config config = new Config();

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

//2.根據(jù)Config創(chuàng)建出RedissonClient

return Redisson.create(config);

}

}

以上方式為但節(jié)點(diǎn)模式,也可以配置集群模式:

Config config = new Config();

config.useClusterServers()

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

//可以用"rediss://"來(lái)啟用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.使用分布式鎖進(jìn)行redis占鎖

@Autowired

RedissonClient redisson;

最常見(jiàn)的使用方法:

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

// 最常見(jiàn)的使用方法

lock.lock();

解釋說(shuō)明

使用基本鎖以后,redisson使用了自動(dòng)續(xù)期,如果業(yè)務(wù)超長(zhǎng),運(yùn)行期間自動(dòng)續(xù)上30s,不用擔(dān)心業(yè)務(wù)時(shí)間長(zhǎng),鎖自動(dòng)過(guò)期被刪掉。

大家都知道,如果負(fù)責(zé)儲(chǔ)存這個(gè)分布式鎖的Redisson節(jié)點(diǎn)宕機(jī)以后,而且這個(gè)鎖正好處于鎖住的狀態(tài)時(shí),這個(gè)鎖會(huì)出現(xiàn)鎖死的狀態(tài)。為了避免這種情況的發(fā)生,Redisson內(nèi)部提供了一個(gè)監(jiān)控鎖的看門狗,它的作用是在Redisson實(shí)例被關(guān)閉前,不斷的延長(zhǎng)鎖的有效期。默認(rèn)情況下,看門狗的檢查鎖的超時(shí)時(shí)間是30秒鐘,也可以通過(guò)修改Config.lockWatchdogTimeout來(lái)另行指定。

另外Redisson還通過(guò)加鎖的方法提供了leaseTime的參數(shù)來(lái)指定加鎖的時(shí)間。超過(guò)這個(gè)時(shí)間后鎖便自動(dòng)解開了。

// 加鎖以后10秒鐘自動(dòng)解鎖

// 無(wú)需調(diào)用unlock方法手動(dòng)解鎖

lock.lock(10, TimeUnit.SECONDS);

// 嘗試加鎖,最多等待100秒,上鎖以后10秒自動(dòng)解鎖

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

if (res) {

try {

...

} finally {

lock.unlock();

}

}

項(xiàng)目使用以及說(shuō)明

public String hello(){

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

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

//2。加鎖

// lock.lock();

//1).redisson的自動(dòng)續(xù)期,如果業(yè)務(wù)超長(zhǎng),運(yùn)行期間自動(dòng)續(xù)上30s,不用擔(dān)心業(yè)務(wù)時(shí)間長(zhǎng),鎖自動(dòng)過(guò)期被刪掉

//2).加鎖得業(yè)務(wù)只要運(yùn)行完成,就不會(huì)給當(dāng)前鎖續(xù)期,即使不手動(dòng)解鎖,鎖默認(rèn)在30s后自動(dòng)刪除

lock.lock(10, TimeUnit.SECONDS);//10秒以后自動(dòng)解鎖,自動(dòng)解鎖時(shí)間一定要大于業(yè)務(wù)時(shí)間

// lock.lock(10, TimeUnit.SECONDS)在鎖時(shí)間到了以后,不會(huì)自動(dòng)續(xù)期

//1.如果我們傳遞了鎖的超時(shí)時(shí)間,就發(fā)送給redis執(zhí)行腳本,進(jìn)行站鎖,默認(rèn)時(shí)間就是我我們傳遞的時(shí)間

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

//只要站鎖成功,就會(huì)啟動(dòng)定時(shí)任務(wù)(重新給鎖設(shè)置過(guò)期時(shí)間)新的時(shí)間就是看門狗的默認(rèn)時(shí)間,每10秒,都會(huì)自動(dòng)續(xù)期續(xù)成滿時(shí)間

//最佳實(shí)戰(zhàn)

//1)lock.lock(10, TimeUnit.SECONDS) 省略了整個(gè)續(xù)期操作,手動(dòng)解鎖

try {

System.out.println("加鎖成功,執(zhí)行業(yè)務(wù)"+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

如您對(duì)本文有疑問(wèn)或者有任何想說(shuō)的,請(qǐng)點(diǎn)擊進(jìn)行留言回復(fù),萬(wàn)千網(wǎng)友為您解惑!

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。