Browse Source

lock timeout

wangyunpeng 3 weeks ago
parent
commit
0063d58a78

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/XxlJobService.java

@@ -1134,7 +1134,7 @@ public class XxlJobService {
         Integer index = 0;
         for (int i = 0; i < 6; i++) {
             String redisKey = lockKey + i;
-            lockAcquired = redisUtil.tryAcquireLock(redisKey, requestId);
+            lockAcquired = redisUtil.tryAcquireLock(redisKey, requestId, 600000L);
             if (lockAcquired) {
                 index = i;
                 lockKey = redisKey;

+ 6 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/util/RedisUtil.java

@@ -20,6 +20,12 @@ public class RedisUtil {
         return Boolean.TRUE.equals(lockAcquired);
     }
 
+    public boolean tryAcquireLock(String lockKey, String requestId, Long time) {
+        // 尝试获取锁
+        Boolean lockAcquired = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, time, TimeUnit.SECONDS);
+        return Boolean.TRUE.equals(lockAcquired);
+    }
+
     public void releaseLock(String lockKey, String requestId) {
         // 使用 Lua 脚本确保释放锁的原子性
         String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";