From 640ff18d2d7f4be02ddb7f8f75e899f05545eb98 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 05 二月 2024 11:56:52 +0800
Subject: [PATCH] 更新bug修改

---
 cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java |   90 +++++++++++++++++++++++++++++++++++++--------
 1 files changed, 74 insertions(+), 16 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..d5f9ab2 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,15 +21,18 @@
     @Autowired
     private JedisPool jedisPool;
 
+    private static final int TIMEOUT = 10 * 1000; // 10秒超时时间
+    private static final int SLEEP_TIME = 1000; // 1秒休眠时间
 
     /**
      * 向redis中存储字符串没有过期时间
      * Storing strings in Redis without an expiration time.
+     *
      * @param key
      * @param value
      */
-    public void setStrValue(String key, String value){
-        if(StringUtil.isNotEmpty(key)){
+    public void setStrValue(String key, String value) {
+        if (StringUtil.isNotEmpty(key)) {
             Jedis resource = jedisPool.getResource();
             String set = resource.set(key, value);
             closeJedis(resource);
@@ -40,12 +43,13 @@
     /**
      * 以分钟为单位设置存储值(设置过期时间)
      * Set storage value in minutes (set expiration time) as units.
+     *
      * @param key
      * @param value
-     * @param time 秒
+     * @param time  秒
      */
-    public void setStrValue(String key, String value, int time){
-        if(StringUtil.isNotEmpty(key)){
+    public void setStrValue(String key, String value, int time) {
+        if (StringUtil.isNotEmpty(key)) {
             Jedis resource = jedisPool.getResource();
             String setex = resource.setex(key, time, value);
             closeJedis(resource);
@@ -55,11 +59,12 @@
 
     /**
      * 从redis中获取值
+     *
      * @param key
      * @return
      */
-    public String getValue(String key){
-        if(StringUtil.isNotEmpty(key)){
+    public String getValue(String key) {
+        if (StringUtil.isNotEmpty(key)) {
             Jedis resource = jedisPool.getResource();
             String data = resource.get(key);
             closeJedis(resource);
@@ -71,14 +76,15 @@
 
     /**
      * 批量获取
+     *
      * @param kes
      * @return
      */
-    public List<Object> getValues(List<String> kes){
-        if(null != kes){
+    public List<Object> getValues(List<String> kes) {
+        if (null != kes) {
             Jedis resource = jedisPool.getResource();
             Pipeline pipelined = resource.pipelined();
-            for(String key : kes){
+            for (String key : kes) {
                 pipelined.get(key);
             }
             List<Object> list = pipelined.syncAndReturnAll();
@@ -91,8 +97,8 @@
                 e.printStackTrace();
             }
             List<Object> data = new ArrayList<>();
-            for(Object o : list){
-                if(null != o){
+            for (Object o : list) {
+                if (null != o) {
                     data.add(o);
                 }
             }
@@ -104,10 +110,11 @@
 
     /**
      * 删除key
+     *
      * @param key
      */
-    public void remove(String key){
-        if(StringUtil.isNotEmpty(key)){
+    public void remove(String key) {
+        if (StringUtil.isNotEmpty(key)) {
             Jedis resource = jedisPool.getResource();
             Long del = resource.del(key);
             closeJedis(resource);
@@ -117,11 +124,62 @@
 
     /**
      * 删除资源
+     *
      * @param jedis
      */
-    public void closeJedis(Jedis jedis){
-        if(null != jedis){
+    public void closeJedis(Jedis jedis) {
+        if (null != jedis) {
             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