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