云计算百科
云计算领域专业知识百科平台

分布式锁Redisson使用

redission为我们提供了方便使用redis集群的方法,可以使用它完成锁的建立。

依赖

<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.36.0</version>
</dependency>

spring引用

package com.hmdp.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RedisConfig {
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379").setPassword("");
return Redisson.create(config);
}
}

可重用锁原理

redisson的可重用锁,通过redis的hash实现,value保存重用值。 在这里插入图片描述 通过lua脚本实现获取和释放锁。 获取锁: 在这里插入图片描述

释放锁: 在这里插入图片描述

锁重试以及watchdog原理

获取锁

首先获取根据有没有leasetime,如果没有设置watchdogtime=30秒,然后去获取锁,如果获取到了,直接返回true,如果没有获取到,则根据等待时间来判断是否继续,如果已经超出等待时间,则直接返回,没有运行订阅方法,来查询当前锁还有多久ttl,根据目前剩余等待时间,如果小于ttl,则重新运行获取锁方法,else则false发走。 在这里插入图片描述

释放锁:

比较简单,这里不叙述 在这里插入图片描述

watchdog:

在设置无leasetime时,redisson会自动填充为watchdogtime的30秒,并且执行一个异步任务,每次都将锁的ttl重置为30秒。

在这里插入图片描述

multiLock

使用redis的主从策略,如果主机宕机的话,可能出现数据不一致的问题,而redisson的multiLock为我们提供了解决方法,它保证了不同redis的原子性,只需要在声明注入即可。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 分布式锁Redisson使用
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!