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 | 38 +++++++++++++++++++++++++++++--------- 1 files changed, 29 insertions(+), 9 deletions(-) diff --git a/se-common/src/main/java/com/terra/common/service/RedisService.java b/se-common/src/main/java/com/terra/common/service/RedisService.java index e0f288c..ae7df4f 100644 --- a/se-common/src/main/java/com/terra/common/service/RedisService.java +++ b/se-common/src/main/java/com/terra/common/service/RedisService.java @@ -1,29 +1,30 @@ package com.terra.common.service; +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 */ +@Getter @Service public class RedisService { - @Resource - private RedisTemplate<String, Object> redisTemplate; - /** + * -- GETTER -- * 鑾峰彇Redis妯℃澘 */ - public RedisTemplate<String, Object> getRedisTemplate() { - return redisTemplate; - } + @Resource + private RedisTemplate<String, Object> redisTemplate; /** * 璁剧疆鍊煎埌redis涓� @@ -79,10 +80,10 @@ /** * 娓呯┖鎸囧畾閿墠缂� * - * @param subKeyString 閿墠缂� + * @param prefix 閿墠缂� */ - public void clearKeys(String subKeyString) { - Set<String> keys = redisTemplate.keys(subKeyString + "*"); + public void clearKeys(String prefix) { + Set<String> keys = redisTemplate.keys(prefix + "*"); if (!keys.isEmpty()) { redisTemplate.delete(keys); } @@ -127,4 +128,23 @@ 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