From a6ba7d909329b8f2262b7014c1ffc7b0dde2a56e Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期三, 09 六月 2021 23:31:47 +0800
Subject: [PATCH] update 优化pr redis工具代码
---
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RedisLockAspect.java | 38 +++----------------
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java | 34 ++++++++++++++++-
2 files changed, 38 insertions(+), 34 deletions(-)
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java
index 7792784..40019fc 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java
@@ -2,9 +2,14 @@
import com.ruoyi.common.annotation.RedisLock;
import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.redis.RedisLockManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+
+import java.util.concurrent.TimeUnit;
/**
@@ -12,16 +17,20 @@
*
* @author shenxinquan
*/
+@Slf4j
@RestController
@RequestMapping("/demo/redisLock")
public class RedisLockController {
+ @Autowired
+ private RedisLockManager redisLockManager;
+
/**
* #p0 鏍囪瘑鍙栫涓�涓弬鏁颁负redis閿佺殑key
*/
- @GetMapping("/getLock")
+ @GetMapping("/testLock1")
@RedisLock(expireTime = 10, key = "#p0")
- public AjaxResult<String> getLock(String key, String value) {
+ public AjaxResult<String> testLock1(String key, String value) {
try {
// 鍚屾椂璇锋眰鎺掗槦
// Thread.sleep(5000);
@@ -32,4 +41,25 @@
}
return AjaxResult.success("鎿嶄綔鎴愬姛",value);
}
+
+ /**
+ * 娴嬭瘯閿佸伐鍏风被
+ */
+ @GetMapping("/testLock2")
+ public AjaxResult<Void> testLock(String key, Long time) {
+ try {
+ boolean flag = redisLockManager.getLock(key, time, TimeUnit.SECONDS);
+ if (flag) {
+ log.info("鑾峰彇閿佹垚鍔�: " + key);
+ Thread.sleep(3000);
+ redisLockManager.unLock();
+ log.info("閲婃斁閿佹垚鍔�: " + key);
+ } else {
+ log.error("鑾峰彇閿佸け璐�: " + key);
+ }
+ } catch (InterruptedException e) {
+ log.error(e.getMessage());
+ }
+ return AjaxResult.success();
+ }
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RedisLockAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RedisLockAspect.java
index 0af3844..9d3bc8d 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RedisLockAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RedisLockAspect.java
@@ -3,6 +3,7 @@
import com.ruoyi.common.annotation.RedisLock;
import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.redis.RedisLockManager;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
@@ -10,7 +11,6 @@
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.redisson.api.RLock;
-import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@@ -33,7 +33,7 @@
public class RedisLockAspect {
@Autowired
- private RedissonClient redissonClient;
+ private RedisLockManager redisLockManager;
@Pointcut("@annotation(com.ruoyi.common.annotation.RedisLock)")
public void annotationPointcut() {
@@ -70,14 +70,16 @@
key = Constants.REDIS_LOCK_KEY + key;
Object res;
try {
- if (acquire(key, expireTime, TimeUnit.SECONDS)) {
+ if (redisLockManager.getLock(key, expireTime, TimeUnit.SECONDS)) {
+ log.info("lock => key : " + key + " , ThreadName : " + Thread.currentThread().getName());
try {
res = joinPoint.proceed();
return res;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
- release(key);
+ redisLockManager.unLock();
+ log.info("unlock => key : " + key + " , ThreadName : " + Thread.currentThread().getName());
}
} else {
throw new RuntimeException("redis鍒嗗竷寮忛攣娉ㄨВ鍙傛暟寮傚父");
@@ -131,34 +133,6 @@
}
}
return listPar;
- }
-
- /**
- * 鍔犻攣锛圧Lock锛夊甫瓒呮椂鏃堕棿鐨�
- */
- private boolean acquire(String key, long expire, TimeUnit expireUnit) {
- try {
- //鑾峰彇閿佸璞�
- RLock mylock = redissonClient.getLock(key);
- //鍔犻攣锛屽苟涓旇缃攣杩囨湡鏃堕棿锛岄槻姝㈡閿佺殑浜х敓
- mylock.tryLock(expire, expire, expireUnit);
- } catch (InterruptedException e) {
- return false;
- }
- log.info("lock => key : " + key + " , ThreadName : " + Thread.currentThread().getName());
- //鍔犻攣鎴愬姛
- return true;
- }
-
- /**
- * 閿佺殑閲婃斁
- */
- private void release(String lockName) {
- //鑾峰彇鎵�瀵硅薄
- RLock mylock = redissonClient.getLock(lockName);
- //閲婃斁閿侊紙瑙i攣锛�
- mylock.unlock();
- log.info("unlock => key : " + lockName + " , ThreadName : " + Thread.currentThread().getName());
}
}
--
Gitblit v1.9.3