记一次Redisson分布式锁实践
背景
在分布式架构服务系统中,分布式锁是一种处理幂等的有效方式,记录一下生产级Redisson的使用方式。
SpringBoot引入
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.17.1</version>
</dependency>
配置application配置文件
配置redis的连接信息
redisson 的使用流程
@RestController
@RequestMapping("/redisson")
@AllArgsConstructor
public class RedissonController {
private final RedissonClient redissonClient;
@GetMapping("/test")
public String test() {
// 生成一把锁,锁的生成要结合业务场景,为单笔业务交易设置一个KEY,通过业务KEY来生成锁
RLock lock = redissonClient.getLock("test");
boolean isLock;
try {
// 尝试加锁,最多等待1秒,上锁以后10秒自动解锁
// 这个等待时间和自动解锁时间需根据业务做相应的调整
isLock = lock.tryLock(1, 10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
return "加锁失败,";
}
try {
if (!isLock) {
return "未获取到锁";
}
// 获取到锁,业务逻辑处理
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
return "业务处理异常";
}
} finally {
if (lock != null && lock.isHeldByCurrentThread()) {
// 释放锁
lock.unlockAsync();
}
}
return "ok";
}
}
posted on 2022-11-25 11:37 bigstrong_code 阅读(95) 评论(0) 编辑 收藏 举报