網(wǎng)站首頁 編程語言 正文
【Redis】Redisson分布式鎖原理與使用
什么是Redisson?
Redisson - 是一個高級的分布式協(xié)調(diào)Redis客服端,能幫助用戶在分布式環(huán)境中輕松實(shí)現(xiàn)一些Java的對象,Redisson、Jedis、Lettuce 是三個不同的操作 Redis 的客戶端,Jedis、Lettuce 的 API 更側(cè)重對 Reids 數(shù)據(jù)庫的 CRUD(增刪改查),而 Redisson API 側(cè)重于分布式開發(fā)。
視頻介紹:面試官:分布式鎖有什么作用?如何實(shí)現(xiàn)分布式鎖?_嗶哩嗶哩_bilibili
GitHub地址:https://github.com/redisson/redissonre
Redisson原理流程圖
Redisson 分布式鎖的缺點(diǎn)
Redis分布式鎖會有個缺陷,就是在Redis哨兵模式下:客戶端1 對某個Master節(jié)點(diǎn)寫入了Redisson鎖,此時(shí)會異步復(fù)制給對應(yīng)的 Slave節(jié)點(diǎn)。但是這個過程中一旦發(fā)生 Master節(jié)點(diǎn)宕機(jī),主備切換,slave節(jié)點(diǎn)從變?yōu)榱?Master節(jié)點(diǎn)。這時(shí)客戶端2 來嘗試加鎖的時(shí)候,在新的Master節(jié)點(diǎn)上也能加鎖,此時(shí)就會導(dǎo)致多個客戶端對同一個分布式鎖完成了加鎖。這時(shí)系統(tǒng)在業(yè)務(wù)語義上一定會出現(xiàn)問題,導(dǎo)致各種臟數(shù)據(jù)的產(chǎn)生。
Redisson分布式鎖使用實(shí)例
1.引入Redisson依賴
<!--原生-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.13.4</version>
</dependency>
<!--或者另一種Spring集成starter-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.6</version>
</dependency>
2.配置Redisson
@Configuration
public class RedissionConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.password}")
private String password;
private int port = 6379;
@Bean
public RedissonClient getRedisson() {
Config config = new Config();
config.useSingleServer().
setAddress("redis://" + redisHost + ":" + port).
setPassword(password);
config.setCodec(new JsonJacksonCodec());
return Redisson.create(config);
}
}
3.使用Redisson分布式鎖
@Resource
private RedissonClient redissonClient;
RLock rLock = redissonClient.getLock(lockName);
try {
boolean isLocked = rLock.tryLock(expireTime, TimeUnit.MILLISECONDS);
if (isLocked) {
// TODO
}
} catch (Exception e) {
rLock.unlock();
}
原文鏈接:https://blog.csdn.net/Mr_VK/article/details/132385088
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2024-03-21 【Spring Boot】Spring Boot 配置文件詳解(application.yml、ap
- 2024-01-15 Stream流 - 獲取Stream和轉(zhuǎn)換操作(含基本數(shù)據(jù)類型流)
- 2022-08-10 WPF中圖像處理的方法介紹_C#教程
- 2022-05-25 python?序列去重并保持原始順序操作_python
- 2022-10-18 pandas重復(fù)行刪除操作df.drop_duplicates和df.duplicated的區(qū)別_p
- 2022-06-07 FreeRTOS實(shí)時(shí)操作系統(tǒng)移植操作示例指南_操作系統(tǒng)
- 2022-09-18 Go語言實(shí)現(xiàn)文件上傳_Golang
- 2023-04-07 React替換傳統(tǒng)拷貝方法的Immutable使用_React
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支