From 14d70ea884654e744987f90313f50068adbc12e3 Mon Sep 17 00:00:00 2001
From: nickchange <126672920+nickchange@users.noreply.github.com>
Date: 星期五, 20 十月 2023 13:45:32 +0800
Subject: [PATCH] 10.20.1

---
 cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java
index f84642d..88be661 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java
@@ -21,6 +21,8 @@
     @Autowired
     private JedisPool jedisPool;
 
+    private static final int TIMEOUT = 10 * 1000; // 10秒超时时间
+    private static final int SLEEP_TIME = 1000; // 1秒休眠时间
 
     /**
      * 向redis中存储字符串没有过期时间
@@ -124,4 +126,54 @@
             jedis.close();
         }
     }
+
+
+    public boolean acquireLock(String key,String value) {
+        Jedis jedis = null;
+        try {
+            jedis = jedisPool.getResource();
+            long start = System.currentTimeMillis();
+            String[] split = key.split(";");
+            for (String s : split) {
+
+            while (true) {
+                // 尝试获取锁
+                String result = jedis.set(s, value, "NX", "PX", TIMEOUT);
+                if ("OK".equals(result)) {
+                    return true;
+                }
+                // 超时则返回失败
+                if (System.currentTimeMillis() - start > TIMEOUT) {
+                    return false;
+                }
+                // 休眠一段时间后重试
+                Thread.sleep(SLEEP_TIME);
+            }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (jedis != null) {
+                jedis.close();
+            }
+        }
+        return false;
+    }
+
+    public void releaseLock(String key) {
+        Jedis jedis = null;
+        try {
+            jedis = jedisPool.getResource();
+            jedis.del(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (jedis != null) {
+                jedis.close();
+            }
+        }
+    }
+
+
 }

--
Gitblit v1.7.1