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 |   58 +++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 37 insertions(+), 21 deletions(-)

diff --git a/se-system/src/main/java/com/terra/system/service/all/RedisService.java b/se-common/src/main/java/com/terra/common/service/RedisService.java
similarity index 69%
rename from se-system/src/main/java/com/terra/system/service/all/RedisService.java
rename to se-common/src/main/java/com/terra/common/service/RedisService.java
index b1646a0..ae7df4f 100644
--- a/se-system/src/main/java/com/terra/system/service/all/RedisService.java
+++ b/se-common/src/main/java/com/terra/common/service/RedisService.java
@@ -1,31 +1,30 @@
-package com.terra.system.service.all;
+package com.terra.common.service;
 
-import com.terra.system.entity.all.SettingData;
+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
  */
-@Service("redisService")
+@Getter
+@Service
 public class RedisService {
+    /**
+     * -- GETTER --
+     * 鑾峰彇Redis妯℃澘
+     */
     @Resource
     private RedisTemplate<String, Object> redisTemplate;
-
-    /**
-     * 鑾峰彇Redis妯℃澘
-     *
-     * @return
-     */
-    public RedisTemplate<String, Object> getRedisTemplate() {
-        return redisTemplate;
-    }
 
     /**
      * 璁剧疆鍊煎埌redis涓�
@@ -53,7 +52,6 @@
      * 鏍规嵁key鑾峰彇value
      *
      * @param key 閿�
-     * @return
      */
     public Object get(String key) {
         return redisTemplate.opsForValue().get(key);
@@ -63,7 +61,6 @@
      * 鏄惁瀛樺湪key
      *
      * @param key 閿�
-     * @return
      */
     public boolean hasKey(String key) {
         return redisTemplate.hasKey(key);
@@ -83,11 +80,11 @@
     /**
      * 娓呯┖鎸囧畾閿墠缂�
      *
-     * @param subKeyString 閿墠缂�
+     * @param prefix 閿墠缂�
      */
-    public void clearKeys(String subKeyString) {
-        Set<String> keys = redisTemplate.keys(subKeyString + "*");
-        if (null != keys && keys.size() > 0) {
+    public void clearKeys(String prefix) {
+        Set<String> keys = redisTemplate.keys(prefix + "*");
+        if (!keys.isEmpty()) {
             redisTemplate.delete(keys);
         }
     }
@@ -97,7 +94,7 @@
      */
     public void clearAll() {
         Set<String> keys = redisTemplate.keys("*");
-        if (null != keys && keys.size() > 0) {
+        if (!keys.isEmpty()) {
             redisTemplate.delete(keys);
         }
     }
@@ -118,7 +115,7 @@
      * 鏍规嵁Key淇濆瓨鏁版嵁
      */
     public <T> void saveListByKey(String key, List<T> list) {
-        if (null != list && list.size() > 0) {
+        if (null != list && !list.isEmpty()) {
             put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES);
         }
     }
@@ -127,8 +124,27 @@
      * 鏍规嵁Key淇濆瓨鏁版嵁
      */
     public <T> void saveListByKey(String key, List<T> list, Integer minutes) {
-        if (null != list && list.size() > 0) {
+        if (null != list && !list.isEmpty()) {
             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