From 193945d70b561bc96bb608b47b9b2e4dba3b45b2 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期五, 07 三月 2025 11:40:39 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- 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