From fbb90c31d56348ec3fcc49af49c66b19992f58df Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期五, 16 五月 2025 17:15:32 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java |   45 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)

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

--
Gitblit v1.9.3