From a0536b4aac5867173d6b0280cddbf87cb52de78b Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 16 十月 2025 18:22:30 +0800
Subject: [PATCH] Merge branch 'dev' of http://120.76.84.145:10101/gitblit/r/java/ZhaoYangChuXing
---
DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java | 93 +++++++++++++++++++++++++---------------------
1 files changed, 50 insertions(+), 43 deletions(-)
diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java
index 83c640b..4c0b47e 100644
--- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java
+++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java
@@ -7,6 +7,8 @@
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.*;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -18,6 +20,8 @@
@Autowired
private RedisTemplate redisTemplate;
+
+ private final Map<String, ScheduledExecutorService> LOCK_TASK_MAP = new HashMap<>();
@@ -71,64 +75,67 @@
redisTemplate.delete(key);
}
}
-
-
-
-
-
-
-
+
+
+
/**
- * redis加锁
+ * 加锁
* @param key
- * @param value
* @param time
* @return
*/
- public boolean lock(String key, String value, int time){
- if(!StringUtils.isEmpty(key)){
- key += "_lock";
- return redisTemplate.opsForValue().setIfAbsent(key, value);
+ public boolean lock(String key, long keepTime, long time){
+ ScheduledExecutorService scheduledExecutorService = LOCK_TASK_MAP.get(key);
+ if(null == scheduledExecutorService || scheduledExecutorService.isTerminated()){
+ unlock(key);
+ }
+ keepTime *= 1000;
+ Boolean ifAbsent = redisTemplate.opsForValue().setIfAbsent(key, UUIDUtil.getRandomCode());
+ if(ifAbsent){
+ return addLockMap(key, time);
+ }
+ long timeMillis = System.currentTimeMillis();
+ while (timeMillis + keepTime > System.currentTimeMillis()){
+ ifAbsent = redisTemplate.opsForValue().setIfAbsent(key, UUIDUtil.getRandomCode());
+ if(ifAbsent){
+ return addLockMap(key, time);
+ }
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
}
return false;
}
-
- /**
- * 获取redis锁
- * @param time
- * @return
- */
- public boolean lock(int time){
- String uuid = UUID.randomUUID().toString();
- return lock("redis", uuid, time);
+
+
+ private boolean addLockMap(String key, long time){
+ ScheduledExecutorService scheduledExecutorService = LOCK_TASK_MAP.get(key);
+ if(null == scheduledExecutorService){
+ scheduledExecutorService = Executors.newScheduledThreadPool(1);
+ }
+ LOCK_TASK_MAP.put(key, scheduledExecutorService);
+ scheduledExecutorService.schedule(()->{
+ redisTemplate.delete(key);
+ LOCK_TASK_MAP.remove(key);
+ }, time, TimeUnit.SECONDS);
+ return true;
}
-
-
- public boolean lock(String key, int time){
- String uuid = UUID.randomUUID().toString();
- return lock(key, uuid, time);
- }
-
-
+
+
/**
* redis释放锁
- * @param key
* @return
*/
public boolean unlock(String key){
- if(!StringUtils.isEmpty(key)){
- key += "_lock";
- return redisTemplate.delete(key);
+ redisTemplate.delete(key);
+ ScheduledExecutorService scheduledExecutorService = LOCK_TASK_MAP.get(key);
+ if(null != scheduledExecutorService){
+ scheduledExecutorService.shutdownNow();
}
- return false;
- }
-
- /**
- * 删除锁
- * @return
- */
- public boolean unlock(){
- return unlock("redis");
+ LOCK_TASK_MAP.remove(key);
+ return true;
}
--
Gitblit v1.7.1