From d83e8e364048387bfa5c4c1fd07002940abdf63f Mon Sep 17 00:00:00 2001 From: yupeng <roc__yu@163.com> Date: 星期三, 12 二月 2025 12:07:54 +0800 Subject: [PATCH] feat:更新线下支付接口,RedisCache添加循环取锁方法,其他 --- ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 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..f405893 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 -- Gitblit v1.7.1