Conan
Conan
发布于 2024-05-24 / 37 阅读
0
0

Redis分布式锁去获取唯一Token【二版】

Redisson

  private String getAccessToken() {
    RLock lock = redissonClient.getLock(RedisConstant.getLockKey(RedisConstant.SCWJWXX_TOKEN_KEY));
    boolean acquiredLock = false;
    String accessToken = "";
    try {
      acquiredLock = lock.tryLock(Constant.INT_FIVE, Constant.INT_TEN, TimeUnit.SECONDS);
      if (acquiredLock) {
        accessToken = redisUtil.get(RedisConstant.SCWJWXX_TOKEN_KEY);
        if (StrUtil.isBlank(accessToken)) {
          getToken();
          accessToken = redisUtil.get(RedisConstant.SCWJWXX_TOKEN_KEY);
        }
      }
    } catch (InterruptedException e) {
      Thread.currentThread().interrupt();
    } finally {
      // 只有成功获得锁的情况下才去执行解锁操作
      if (acquiredLock) {
        lock.unlock();
      }
    }
    if (StrUtil.isBlank(accessToken)) {
      throw new CommonException(CMEnum.ERROR, "定时任务:监管无法获取token");
    }
    return accessToken;
  }
  1. 使用Redission去获取锁;

  2. 尝试获取锁,最多等待5秒,获取成功后,最多持有10秒;

  3. 获取成功,才会解锁;


评论