From b7becf98e156a8c5f0c89a926b70f7a528ea172b Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期二, 29 七月 2025 14:24:51 +0800
Subject: [PATCH] 添加分布式锁,解决重复执行任务问题

---
 se-common/src/main/java/com/terra/common/service/RedisService.java |   38 +++++++++++++++++++++++++++++---------
 1 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/se-common/src/main/java/com/terra/common/service/RedisService.java b/se-common/src/main/java/com/terra/common/service/RedisService.java
index e0f288c..ae7df4f 100644
--- a/se-common/src/main/java/com/terra/common/service/RedisService.java
+++ b/se-common/src/main/java/com/terra/common/service/RedisService.java
@@ -1,29 +1,30 @@
 package com.terra.common.service;
 
+import com.terra.common.entity.all.RedisCacheKey;
 import com.terra.common.entity.all.SettingData;
+import lombok.Getter;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
 /**
  * Redis鏈嶅姟绫�
  * @author WWW
  */
+@Getter
 @Service
 public class RedisService {
-    @Resource
-    private RedisTemplate<String, Object> redisTemplate;
-
     /**
+     * -- GETTER --
      * 鑾峰彇Redis妯℃澘
      */
-    public RedisTemplate<String, Object> getRedisTemplate() {
-        return redisTemplate;
-    }
+    @Resource
+    private RedisTemplate<String, Object> redisTemplate;
 
     /**
      * 璁剧疆鍊煎埌redis涓�
@@ -79,10 +80,10 @@
     /**
      * 娓呯┖鎸囧畾閿墠缂�
      *
-     * @param subKeyString 閿墠缂�
+     * @param prefix 閿墠缂�
      */
-    public void clearKeys(String subKeyString) {
-        Set<String> keys = redisTemplate.keys(subKeyString + "*");
+    public void clearKeys(String prefix) {
+        Set<String> keys = redisTemplate.keys(prefix + "*");
         if (!keys.isEmpty()) {
             redisTemplate.delete(keys);
         }
@@ -127,4 +128,23 @@
             put(key, list, minutes, TimeUnit.MINUTES);
         }
     }
+
+    /**
+     * 鑾峰彇鍒嗗竷寮忛攣
+     */
+    public boolean tryLock(String key, long expireTime, TimeUnit timeUnit) {
+        String lockKey = RedisCacheKey.resourceLockKey(key);
+        String value = UUID.randomUUID().toString();
+
+        return Boolean.TRUE.equals(redisTemplate.opsForValue().setIfAbsent(lockKey, value, expireTime, timeUnit));
+    }
+
+    /**
+     * 閲婃斁閿�
+     */
+    public void releaseLock(String key) {
+        String lockKey = RedisCacheKey.resourceLockKey(key);
+
+        redisTemplate.delete(lockKey);
+    }
 }

--
Gitblit v1.9.3