日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

【Redis】Redisson分布式鎖原理與使用

作者:Mr.VK 更新時間: 2024-03-09 編程語言

【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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新