網站首頁 編程語言 正文
【Redis】Redisson分布式鎖原理與使用
什么是Redisson?
Redisson - 是一個高級的分布式協調Redis客服端,能幫助用戶在分布式環境中輕松實現一些Java的對象,Redisson、Jedis、Lettuce 是三個不同的操作 Redis 的客戶端,Jedis、Lettuce 的 API 更側重對 Reids 數據庫的 CRUD(增刪改查),而 Redisson API 側重于分布式開發。
視頻介紹:面試官:分布式鎖有什么作用?如何實現分布式鎖?_嗶哩嗶哩_bilibili
GitHub地址:https://github.com/redisson/redissonre
Redisson原理流程圖
Redisson 分布式鎖的缺點
Redis分布式鎖會有個缺陷,就是在Redis哨兵模式下:客戶端1 對某個Master節點寫入了Redisson鎖,此時會異步復制給對應的 Slave節點。但是這個過程中一旦發生 Master節點宕機,主備切換,slave節點從變為了 Master節點。這時客戶端2 來嘗試加鎖的時候,在新的Master節點上也能加鎖,此時就會導致多個客戶端對同一個分布式鎖完成了加鎖。這時系統在業務語義上一定會出現問題,導致各種臟數據的產生。
Redisson分布式鎖使用實例
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
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-03-29 詳解C++?的STL迭代器原理和實現_C 語言
- 2022-04-01 k8s Error: could not find tiller
- 2022-03-23 Android應用內懸浮窗Activity的簡單實現_Android
- 2022-03-13 C語言之直接插入排序算法的方法_C 語言
- 2024-01-31 nginx配置文件中最后一個 include servers/*;作用是什么?
- 2022-07-11 spring boot中動態代理導致自定義注解掃描失敗以及解決辦法
- 2023-03-18 Flutter封裝組動畫混合動畫AnimatedGroup示例詳解_Android
- 2022-07-15 SQL?Server創建用戶定義函數_MsSql
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支