Bladeren bron

单小程序视频获取加锁处理

xueyiming 1 maand geleden
bovenliggende
commit
cd57dbbc00

+ 16 - 1
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/local/impl/MatchVideoServiceImpl.java

@@ -28,6 +28,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.concurrent.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -48,6 +49,8 @@ public class MatchVideoServiceImpl {
 
     private static final String EXIST_RESULT_KEY = "exist_result_key_%s";
 
+    private static final String SINGLE_VIDEO_LOCK_KEY = "single_video_lock_key_%s";
+
 
     @Autowired
     KimiService kimiService;
@@ -293,7 +296,19 @@ public class MatchVideoServiceImpl {
         }
 
         if (StringUtils.isNotEmpty(matchVideo.getVideoPoolTraceId())) {
-            addCrawlerVideo(matchVideo);
+            //已经存在结果  直接设置
+            if (existMatchVideoResult(matchVideo)) {
+                return;
+            }
+            String lockKey = String.format(SINGLE_VIDEO_LOCK_KEY, matchVideo.getContentId());
+            String lockValue = UUID.randomUUID().toString();
+            boolean lock = redisLock.tryLock(lockKey, lockValue, 300, TimeUnit.SECONDS);
+            if (lock) {
+                log.info("singleCrawlerVideo lock lockKey={}", lockKey);
+                addCrawlerVideo(matchVideo);
+                log.info("singleCrawlerVideo unlock lockKey={}", lockKey);
+                redisLock.unlock(lockKey, lockValue);
+            }
             return;
         }