From cb2f02d60aac235f2f9e5ef777e0141fb697c264 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期五, 01 五月 2026 15:18:11 +0800
Subject: [PATCH] 多加入参数和修改规则
---
rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 109 insertions(+), 1 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java
index b45cd81..4c6fc3c 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java
@@ -10,9 +10,13 @@
import com.vincent.rsf.server.system.entity.Config;
import com.vincent.rsf.server.system.enums.ConfigType;
import com.vincent.rsf.server.system.enums.StatusType;
+import com.vincent.rsf.server.common.service.RedisService;
+import com.vincent.rsf.server.system.config.ConfigCacheProperties;
import com.vincent.rsf.server.system.mapper.ConfigMapper;
import com.vincent.rsf.server.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@@ -28,7 +32,15 @@
@Slf4j
public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> implements ConfigService {
+ /** 涓� {@link RedisService#set(String, String, Object, Integer)} 鐨� flag 娈典竴鑷达細sys_config 闈炴案涔� key锛岃 {@link ConfigCacheProperties} */
+ private static final String REDIS_FLAG_SYS_CONFIG = "SYS_CONFIG";
+
public static final Map<String, Config> CONFIG_CACHE = new ConcurrentHashMap<>();
+
+ @Autowired(required = false)
+ private RedisService redisService;
+ @Autowired
+ private ConfigCacheProperties configCacheProperties;
@PostConstruct
public void init() {
@@ -41,6 +53,89 @@
} catch (Exception e) {
log.warn("閰嶇疆缂撳瓨鍒濆鍖栧け璐ワ紝璺宠繃閰嶇疆琛ㄥ姞杞斤紝鍚庣画鎸夐粯璁ゆ祦绋嬪鐞�", e);
}
+ }
+
+ private boolean redisReady() {
+ return redisService != null && Boolean.TRUE.equals(redisService.initialize);
+ }
+
+ private static boolean isEffectiveConfig(Config c) {
+ return c != null && (c.getDeleted() == null || c.getDeleted() == 0);
+ }
+
+ private Config loadConfigFromDb(String flag) {
+ return getOne(new LambdaQueryWrapper<Config>()
+ .eq(Config::getFlag, flag)
+ .eq(Config::getDeleted, 0), false);
+ }
+
+ private Config tryRedisGetConfig(String flag) {
+ try {
+ return redisService.get(REDIS_FLAG_SYS_CONFIG, flag);
+ } catch (Exception e) {
+ log.debug("sys_config Redis get flag={}", flag, e);
+ return null;
+ }
+ }
+
+ private void tryRedisSetexConfig(String flag, Config loaded) {
+ if (!redisReady() || loaded == null) {
+ return;
+ }
+ int ttl = configCacheProperties.getRedisTtlSeconds();
+ if (ttl <= 0) {
+ log.warn("sys_config Redis setex 宸茶烦杩囷細config.cache.redis-ttl-seconds 椤讳负姝f暟锛宖lag={}", flag);
+ return;
+ }
+ try {
+ redisService.set(REDIS_FLAG_SYS_CONFIG, flag, loaded, ttl);
+ } catch (Exception e) {
+ log.warn("sys_config Redis setex flag={}", flag, e);
+ }
+ }
+
+ @Override
+ public void evictSysConfigRedis(String flag) {
+ if (!redisReady() || StringUtils.isBlank(flag)) {
+ return;
+ }
+ try {
+ redisService.delete(REDIS_FLAG_SYS_CONFIG, flag);
+ } catch (Exception e) {
+ log.warn("sys_config Redis evict flag={}", flag, e);
+ }
+ }
+
+ @Override
+ public Config getCachedOrLoad(String flag) {
+ if (StringUtils.isBlank(flag)) {
+ return null;
+ }
+ Config mem = CONFIG_CACHE.get(flag);
+ if (isEffectiveConfig(mem)) {
+ return mem;
+ }
+ if (mem != null) {
+ CONFIG_CACHE.remove(flag);
+ }
+ if (redisReady()) {
+ Config fromRedis = tryRedisGetConfig(flag);
+ if (isEffectiveConfig(fromRedis)) {
+ CONFIG_CACHE.put(flag, fromRedis);
+ return fromRedis;
+ }
+ Config loaded = loadConfigFromDb(flag);
+ if (loaded != null) {
+ CONFIG_CACHE.put(flag, loaded);
+ tryRedisSetexConfig(flag, loaded);
+ }
+ return loaded;
+ }
+ Config loaded = loadConfigFromDb(flag);
+ if (loaded != null) {
+ CONFIG_CACHE.put(flag, loaded);
+ }
+ return loaded;
}
@Override
@@ -130,7 +225,11 @@
throw new UnsupportedOperationException("Unsupported ConfigType: " + configType);
}
- return this.updateById(config);
+ boolean ok = this.updateById(config);
+ if (ok) {
+ evictSysConfigRedis(key);
+ }
+ return ok;
}
private List<Config> safeList(LambdaQueryWrapper<Config> wrapper) {
@@ -152,6 +251,15 @@
if (!this.update(new LambdaUpdateWrapper<Config>().set(Config::getVal, config.getVal()).eq(Config::getFlag, config.getFlag()))) {
throw new CoolException("淇敼澶辫触锛侊紒");
}
+ Config fresh = getOne(new LambdaQueryWrapper<Config>()
+ .eq(Config::getFlag, config.getFlag())
+ .eq(Config::getDeleted, 0), false);
+ if (fresh != null) {
+ CONFIG_CACHE.put(fresh.getFlag(), fresh);
+ } else {
+ CONFIG_CACHE.remove(config.getFlag());
+ }
+ evictSysConfigRedis(config.getFlag());
return R.ok();
}
--
Gitblit v1.9.1