Redisson实现分布式锁案例
- 引入依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.23.2</version>
</dependency>
- 创建Redisson配置类
@Configuration
public class RedissonConfig {
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
return Redisson.create(config);
}
}
- 使用分布式锁
@RestController
public class LockController {
@Resource
private RedissonClient redissonClient;
@RequestMapping("/lock")
public String lockResource() throws InterruptedException {
String lockKey = "myLock";
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(20, TimeUnit.SECONDS);
if(isLocked) {
try {
TimeUnit.SECONDS.sleep(5);
return "成功获取到锁,并执行业务代码";
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
} else {
return "获取锁失败";
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return "获取锁成功";
}
}```