From b7becf98e156a8c5f0c89a926b70f7a528ea172b Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期二, 29 七月 2025 14:24:51 +0800 Subject: [PATCH] 添加分布式锁,解决重复执行任务问题 --- se-common/src/main/java/com/terra/common/service/RedisService.java | 58 +++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 37 insertions(+), 21 deletions(-) diff --git a/se-system/src/main/java/com/terra/system/service/all/RedisService.java b/se-common/src/main/java/com/terra/common/service/RedisService.java similarity index 69% rename from se-system/src/main/java/com/terra/system/service/all/RedisService.java rename to se-common/src/main/java/com/terra/common/service/RedisService.java index b1646a0..ae7df4f 100644 --- a/se-system/src/main/java/com/terra/system/service/all/RedisService.java +++ b/se-common/src/main/java/com/terra/common/service/RedisService.java @@ -1,31 +1,30 @@ -package com.terra.system.service.all; +package com.terra.common.service; -import com.terra.system.entity.all.SettingData; +import com.terra.common.entity.all.RedisCacheKey; +import com.terra.common.entity.all.SettingData; +import lombok.Getter; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Set; +import java.util.UUID; import java.util.concurrent.TimeUnit; /** * Redis鏈嶅姟绫� * @author WWW */ -@Service("redisService") +@Getter +@Service public class RedisService { + /** + * -- GETTER -- + * 鑾峰彇Redis妯℃澘 + */ @Resource private RedisTemplate<String, Object> redisTemplate; - - /** - * 鑾峰彇Redis妯℃澘 - * - * @return - */ - public RedisTemplate<String, Object> getRedisTemplate() { - return redisTemplate; - } /** * 璁剧疆鍊煎埌redis涓� @@ -53,7 +52,6 @@ * 鏍规嵁key鑾峰彇value * * @param key 閿� - * @return */ public Object get(String key) { return redisTemplate.opsForValue().get(key); @@ -63,7 +61,6 @@ * 鏄惁瀛樺湪key * * @param key 閿� - * @return */ public boolean hasKey(String key) { return redisTemplate.hasKey(key); @@ -83,11 +80,11 @@ /** * 娓呯┖鎸囧畾閿墠缂� * - * @param subKeyString 閿墠缂� + * @param prefix 閿墠缂� */ - public void clearKeys(String subKeyString) { - Set<String> keys = redisTemplate.keys(subKeyString + "*"); - if (null != keys && keys.size() > 0) { + public void clearKeys(String prefix) { + Set<String> keys = redisTemplate.keys(prefix + "*"); + if (!keys.isEmpty()) { redisTemplate.delete(keys); } } @@ -97,7 +94,7 @@ */ public void clearAll() { Set<String> keys = redisTemplate.keys("*"); - if (null != keys && keys.size() > 0) { + if (!keys.isEmpty()) { redisTemplate.delete(keys); } } @@ -118,7 +115,7 @@ * 鏍规嵁Key淇濆瓨鏁版嵁 */ public <T> void saveListByKey(String key, List<T> list) { - if (null != list && list.size() > 0) { + if (null != list && !list.isEmpty()) { put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES); } } @@ -127,8 +124,27 @@ * 鏍规嵁Key淇濆瓨鏁版嵁 */ public <T> void saveListByKey(String key, List<T> list, Integer minutes) { - if (null != list && list.size() > 0) { + if (null != list && !list.isEmpty()) { put(key, list, minutes, TimeUnit.MINUTES); } } + + /** + * 鑾峰彇鍒嗗竷寮忛攣 + */ + public boolean tryLock(String key, long expireTime, TimeUnit timeUnit) { + String lockKey = RedisCacheKey.resourceLockKey(key); + String value = UUID.randomUUID().toString(); + + return Boolean.TRUE.equals(redisTemplate.opsForValue().setIfAbsent(lockKey, value, expireTime, timeUnit)); + } + + /** + * 閲婃斁閿� + */ + public void releaseLock(String key) { + String lockKey = RedisCacheKey.resourceLockKey(key); + + redisTemplate.delete(lockKey); + } } -- Gitblit v1.9.3