From e7c9817ea941cbba5391bd2f9155c1bbb71ff53e Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 07 三月 2025 18:45:58 +0800
Subject: [PATCH] 权限
---
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java | 39 +++++++++++++++++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
index 932a4af..96864ac 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
@@ -289,6 +289,35 @@
}
/**
+ * 尝试加锁
+ *
+ * @param lockKey 锁的key
+ * @param requestId 锁的持有者标识符(如UUID)
+ * @param expireTime 锁的过期时间(秒)
+ * @return 加锁成功返回true,否则返回false
+ */
+ public boolean trylockLoop(String lockKey, String requestId,long expireTime) {
+ String lockKeyWithPrefix = LOCK_PREFIX + lockKey;
+ // 使用SET命令的NX和PX选项来加锁
+ Boolean result = false;
+ int num = 50;
+ while (num>0){
+ result = redisTemplate.opsForValue().setIfAbsent(lockKeyWithPrefix, requestId, expireTime, TimeUnit.SECONDS);
+ if (result){
+ break;
+ }
+ try {
+ TimeUnit.MILLISECONDS.sleep(200);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ num--;
+ }
+ return result;
+ }
+
+
+ /**
* 解锁
*
* @param lockKey 锁的key
@@ -301,4 +330,14 @@
Long result = (Long) redisTemplate.execute(UNLOCK_SCRIPT, Collections.singletonList(lockKeyWithPrefix), requestId);
return result != null && result == 1L;
}
+
+ /**
+ * 自增
+ * @param key 要加一的键
+ */
+ public int increment(String key) {
+ // +1 操作
+ return redisTemplate.opsForValue().increment(key).intValue();
+ }
+
}
--
Gitblit v1.7.1