学无先后,达者为师

网站首页 编程语言 正文

【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

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新