From 3fb78b0cb1d250a06d8468f6f61a89768ae2e390 Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期五, 16 五月 2025 13:57:04 +0800
Subject: [PATCH] 增加Redis锁组件

---
 aps-common/aps-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |    1 +
 aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java                                      |   45 +++++++++++++++++++++++++++++++++++++++++++++
 aps-common/aps-common-redis/pom.xml                                                                                             |   12 ++++++++++--
 3 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/aps-common/aps-common-redis/pom.xml b/aps-common/aps-common-redis/pom.xml
index 226b45c..80d2edc 100644
--- a/aps-common/aps-common-redis/pom.xml
+++ b/aps-common/aps-common-redis/pom.xml
@@ -22,12 +22,20 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
-        
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+            <version>3.39.0</version>
+        </dependency>
         <!-- RuoYi Common Core-->
         <dependency>
             <groupId>com.aps</groupId>
             <artifactId>aps-common-core</artifactId>
         </dependency>
-        
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java b/aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java
new file mode 100644
index 0000000..659c1fe
--- /dev/null
+++ b/aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java
@@ -0,0 +1,45 @@
+package com.aps.common.redis.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.core.script.RedisScript;
+import org.springframework.stereotype.Component;
+
+import java.time.Duration;
+import java.util.Collections;
+
+/**
+ * Redis 鍒嗗竷寮忛攣
+ *
+ **/
+@Component
+public class RedisLockUtils {
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    //鍒嗗竷寮忛攣杩囨湡鏃堕棿 s  鍙互鏍规嵁涓氬姟鑷繁璋冭妭
+    private static final Long LOCK_REDIS_TIMEOUT = 10L;
+    //鍒嗗竷寮忛攣浼戠湢 鑷� 鍐嶆灏濊瘯鑾峰彇 鐨勭瓑寰呮椂闂� ms 鍙互鏍规嵁涓氬姟鑷繁璋冭妭
+    public static final Long LOCK_REDIS_WAIT = 500L;
+
+
+    /**
+     *  鍔犻攣
+     **/
+    public Boolean getLock(String key,String value,Long timeoutSeconds){
+        Boolean lockStatus = this.redisTemplate.opsForValue().setIfAbsent(key,value, Duration.ofSeconds(timeoutSeconds));
+        return lockStatus;
+    }
+
+    /**
+     *  閲婃斁閿�
+     **/
+    public Long releaseLock(String key,String value){
+        String luaScript = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
+        RedisScript<Long> redisScript = new DefaultRedisScript<>(luaScript,Long.class);
+        Long releaseStatus = (Long)this.redisTemplate.execute(redisScript, Collections.singletonList(key),value);
+        return releaseStatus;
+    }
+}
\ No newline at end of file
diff --git a/aps-common/aps-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/aps-common/aps-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index f8ab30d..c529ae9 100644
--- a/aps-common/aps-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/aps-common/aps-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,2 +1,3 @@
 com.aps.common.redis.configure.RedisConfig
 com.aps.common.redis.service.RedisService
+com.aps.common.redis.service.RedisLockUtils
\ No newline at end of file

--
Gitblit v1.9.3