0%

redisson

1. 配置

1.1. Maven 依赖

1
2
3
4
5
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.4</version>
</dependency>

1.2. Spring 配置

1
2
3
redisson:
singleServerConfig:
address: 127:0:0:1:6379

2. 源码

3. tryLock 原理

org.redisson.RedissonLock#tryLock(long, long, java.util.concurrent.TimeUnit)

  1. 先尝试获取一次, 如果成功, 则返回; 如果超时则, 失败; 否则继续下一步
  2. 根据第一次尝试获取锁的时长作为超时时间, 订阅锁队列, 看在一个时长内是否可以收到解锁消息, 如果不能等到, 则获取锁失败; 付过能等到, 则继续下一步
  3. 判断是否超时, 如果没有则继续下一步
  4. 通过信号量的 boolean tryAcquire(long timeout, TimeUnit unit) 循环递归获取锁
  5. finally 取消订阅

4. Resource