优秀的编程知识分享平台

网站首页 > 技术文章 正文

简单到你一看就懂的分布式锁:redisson分布式锁

nanyue 2024-09-01 00:06:28 技术文章 9 ℃

在分布式环境中,很多场景都需要分布式锁如:秒杀、ID生成等,今天介绍一种redis官方推荐的方法——使用redission实现分布式锁,这是最常用的锁,可重入锁的实现方式

引入jar包:

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

初始化连接:这里使用的是集群,其他非集群方式也很简单,百度一下就可以了

@Configuration
public class RedissonInit {
 @Bean
 public static RedissonClient getInstance(){
 Config config = new Config();
 config.useClusterServers()
 // cluster state scan interval in milliseconds
 .setScanInterval(20000)
 .addNodeAddress("http://192.168.0.99:7001", "http://192.168.0.99:7002")
 .addNodeAddress("http://192.168.0.99:7003");
 RedissonClient redisson = Redisson.create(config);
 return redisson;
 }
}

在你需要使用锁的service中直接引入RedissonClient对象:

@Autowired
public RedissonClient redissonClient;

使用可重入锁:

// 最常见的使用方法
RLock lock = redissonClient.getLock("testLock");
lock.lock();
//...
lock.unlock();
 
//另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。
 
// 加锁以后10秒钟自动解锁
// 无需调用unlock方法手动解锁
lock.lock(10, TimeUnit.SECONDS);
 
// 尝试加锁,最多等待100秒,上锁以后10秒自动解锁
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {
 try {
 ...
 } finally {
 lock.unlock();
 }
}

以上就通过redisson实现了分布式锁,简单到一看就会,如果你仔细看了一遍的话,当然如果你还需要了解redisson其他的一些锁的应用的话,你就得好好研究一下它了,还有很多其他类型的锁,但是这个是最常用的,希望对你有帮助

Tags:

最近发表
标签列表