attempt to unlock lock, not locked by current thread by node id: 83394267-6fff-450c-8cee-2690f845ec4

使用redis的分布式锁出现了下面的错误:

attempt to unlock lock, not locked by current thread by node id: 83394267-6fff-450c-8cee-2690f845ec4f thread-id: 89

有问题的代码:

//从redis查不到,则走mysql
String key = getLiveFaceResourceStLockKey(region);
RLock rLock = redissonRedisService.getLock(key);
try {
      log.info("live_face_resource_st_from_mysql_get_lock");
      boolean bool = rLock.tryLock(RedisKey.EXPIRE_TEN_SECONDS, TimeUnit.SECONDS);
                
      if (bool) {
                       
         List<LiveFaceResourceSt> stList = liveFaceResourceStService.selectListOnline(region, platform);
                        resourcesResponseList.addAll(ListUtils.emptyIfNull(stList).stream()
                                .filter(Objects::nonNull)
                                .map(this::convert)
                                .collect(Collectors.toList()));
      if (CollectionUtils.isNotEmpty(resourcesResponseList)) {
                            micoRedisService.string().set(getLiveFaceResourceStKey(region), JSON.toJSONString(resourcesResponseList));
                            micoRedisService.expire(getLiveFaceResourceStKey(region), RedisKey.EXPIRE_FIVE_MINUTE, TimeUnit.SECONDS);
                        }
                        
                    }
   } catch (Exception e) {
                    log.error("live_face_resource_st_from_mysql_lock_fail:", e);
   } finally {
        if (rLock.isLocked()) {
                try {
                    rLock.unlock();
                } catch (Exception e) {
                    log.error("live_face_resource_st解锁异常:", e);
                }
         }
   }

修复后的代码:

//从redis查不到,则走mysql
String key = getLiveFaceResourceStLockKey(region, platform);
RLock lock = redissonRedisService.getLock(key);
lock.lock(10, TimeUnit.SECONDS);
try {
       List<LiveFaceResourceSt> stList = liveFaceResourceStService.selectListOnline(region, platform);
                    resourcesResponseList.addAll(ListUtils.emptyIfNull(stList).stream()
                            .filter(Objects::nonNull)
                            .map(this::convert)
                            .collect(Collectors.toList()));

       if (CollectionUtils.isNotEmpty(resourcesResponseList)) {
                        micoRedisService.string().set(getLiveFaceResourceStKey(region, platform), JSON.toJSONString(resourcesResponseList));
micoRedisService.expire(getLiveFaceResourceStKey(region, platform), RedisKey.EXPIRE_FIVE_MINUTE, TimeUnit.SECONDS);
         }
 } catch (Exception e) {
                    log.error("live_face_resource_st_from_mysql_lock_fail:", e);
} finally {
       if (lock.isLocked()) {
           lock.unlock();
       }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值