Redisson分布式锁的实现以及优势

本文介绍了如何在SpringBoot项目中使用Redisson快速上手,包括配置类的声明、SpringBootTest的使用,以及Redisson相对于Redis的看门狗机制、重试机制和可重入锁的优势,以提高线程安全和减少锁问题。
摘要由CSDN通过智能技术生成

Redisson的快速上手

      1.声明配置类  

@Configuration
public class RedissonConfig {
    @Bean
    public RedissonClient redissonClient() {
        // 配置
        Config config = new Config();
        config.useSingleServer().setAddress("redis://localhost:6379")
                .setPassword("020827");
        // 创建RedissonClient对象
        return Redisson.create(config);
    }
}

        2.简易使用

@SpringBootTest
public class RedissonTest {


    @Autowired
    private RedissonClient redissonClient;

    @Test
    public void Test1(String key) throws InterruptedException {
        RLock lock = redissonClient.getLock(key);
        //加锁           最大等待时间,超时时间,时间单位
        boolean flag = lock.tryLock(1, 10, TimeUnit.SECONDS);
        if(flag){
            //业务逻辑
        }else{
            //锁获取失败
        }
        //释放锁
        lock.unlock();
    }
}

Redisson相较与Redis的setnx的优势

一、Redisson有一个watchDog看门狗机制会为锁不断地续约,直到线程主动释放锁,防止了锁在持有线程中长时间运行期间失效,确保其他线程不会在不应该获取锁情况下获得它。看门狗机制相较于不设置过期时间避免了在异常情况下锁资源被持续占用而无法释放。

二、Redisson拥有重试机制   当调用tryLock方法时,它会在一定时间范围内尝试获取锁。具体如下:

        1.如果锁当前可用,则立即获得锁并返回true。

        2.如果锁当前不可用,则线程会等待一段时间(最大等待时间)来尝试获取锁。

        3.如果最大等待时间内成功获取锁则返回true。

        4.如果最大等待时间内无法获取锁则返回false。

三、提供可重入机制

        在Redisson中,可重入锁的实现基于Redis的分布式锁(Redis Distributed Lock)。它通过在Redis中存储锁的信息来实现可重入性。每个可重入锁都有一个唯一的标识符用于在Redis中存储锁的状态。 

当线程首次获取可重入锁时,Redisson会向Redis中写入锁的状态信息。状态信息包括锁的持有者、锁的持有数量、锁的过期时间等。锁的持有者根据线程的唯一标识符确定,用于判断是否是同一个线程多次获取锁。

当同一个线程再次请求获取可重入锁时,Redisson会检查当前的锁状态信息。如果锁的持有者是当前线程,说明当前线程已经持有了该锁,可以继续获取锁。此时,Redisson会更新锁的持有数量并延长锁的过期时间。这保证了同一个线程可以多次获取锁而不被阻塞。

当线程释放可重入锁时,Redisson会检查锁的持有数量。如果持有数量为1,说明锁已经完全释放,Redisson会删除Redis中的锁状态信息。如果持有数量大于1,说明还有其他线程持有该锁,Redisson会更新锁的持有数量,并根据需要更新锁的过期时间。

通过这种方式,Redisson实现了可重入锁的机制,允许同一个线程多次获取同一个锁而不会产生死锁或阻塞的问题。这对于一些需要嵌套锁或递归调用的场景非常有用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值