From 1dc3f15acf3743ba469ebf5174e5a0fedeac6113 Mon Sep 17 00:00:00 2001 From: sh Date: Fri, 27 Mar 2026 18:06:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E5=A4=9A=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 4 ++-- .../com/ruoyi/common/core/redis/RedisCache.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 18705f5..8657664 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -96,10 +96,10 @@ public class ESJobSearchImpl implements IESJobSearchService private boolean acquireDistributedLock() throws InterruptedException { long start = System.currentTimeMillis(); while (System.currentTimeMillis() - start < WAIT_LOCK_SECONDS * 1000) { - Boolean success = redisCache.setIfAbsent(ES_INIT_LOCK_KEY,"es_init_locked", + boolean success = redisCache.setIfAbsent(ES_INIT_LOCK_KEY,"es_init_locked", LOCK_EXPIRE_SECONDS,TimeUnit.SECONDS ); - if (Boolean.TRUE.equals(success)) { + if (success) { logger.info("成功获取ES初始化分布式锁,key:{}", ES_INIT_LOCK_KEY); return true; } 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 44e80d8..fa87989 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 @@ -265,4 +265,17 @@ public class RedisCache { return redisTemplate.keys(pattern); } + + /** + * 分布式锁:不存在则设置缓存(原子操作) + * @param key 缓存键 + * @param value 缓存值 + * @param timeout 过期时间 + * @param unit 时间单位 + * @return true=设置成功(获取锁),false=已存在(未获取锁) + */ + public boolean setIfAbsent(String key, Object value, long timeout, TimeUnit unit) { + Boolean result = redisTemplate.opsForValue().setIfAbsent(key, value, timeout, unit); + return Boolean.TRUE.equals(result); + } }