From 615dfdd03fb0bc8989b8a788c9babd30709ac643 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Fri, 4 Apr 2025 18:52:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(cache/redisson):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E9=94=AE=E5=89=8D=E7=BC=80=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RedissonAutoConfiguration.java | 13 +++++ .../autoconfigure/RedissonProperties.java | 13 +++++ .../redisson/handler/NameMapperHandler.java | 51 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/handler/NameMapperHandler.java diff --git a/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/autoconfigure/RedissonAutoConfiguration.java b/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/autoconfigure/RedissonAutoConfiguration.java index 4fcc2e98..dcd80fde 100644 --- a/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/autoconfigure/RedissonAutoConfiguration.java +++ b/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/autoconfigure/RedissonAutoConfiguration.java @@ -33,6 +33,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import top.continew.starter.cache.redisson.handler.NameMapperHandler; import top.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.StringConstants; @@ -104,6 +105,10 @@ public class RedissonAutoConfiguration { if (CharSequenceUtil.isBlank(clusterServersConfig.getPassword())) { clusterServersConfig.setPassword(redisProperties.getPassword()); } + // Key 前缀 + if (CharSequenceUtil.isNotBlank(properties.getKeyPrefix())) { + clusterServersConfig.setNameMapper(new NameMapperHandler(properties.getKeyPrefix())); + } } /** @@ -130,6 +135,10 @@ public class RedissonAutoConfiguration { if (CharSequenceUtil.isBlank(sentinelServersConfig.getMasterName())) { sentinelServersConfig.setMasterName(redisProperties.getSentinel().getMaster()); } + // Key 前缀 + if (CharSequenceUtil.isNotBlank(properties.getKeyPrefix())) { + sentinelServersConfig.setNameMapper(new NameMapperHandler(properties.getKeyPrefix())); + } } /** @@ -153,5 +162,9 @@ public class RedissonAutoConfiguration { singleServerConfig.setAddress(protocolPrefix + redisProperties .getHost() + StringConstants.COLON + redisProperties.getPort()); } + // Key 前缀 + if (CharSequenceUtil.isNotBlank(properties.getKeyPrefix())) { + singleServerConfig.setNameMapper(new NameMapperHandler(properties.getKeyPrefix())); + } } } diff --git a/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/autoconfigure/RedissonProperties.java b/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/autoconfigure/RedissonProperties.java index 60fb445f..9942087a 100644 --- a/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/autoconfigure/RedissonProperties.java +++ b/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/autoconfigure/RedissonProperties.java @@ -37,6 +37,11 @@ public class RedissonProperties { */ private boolean enabled = true; + /** + * 缓存键前缀 + */ + private String keyPrefix; + /** * Redis 模式 */ @@ -88,6 +93,14 @@ public class RedissonProperties { this.enabled = enabled; } + public String getKeyPrefix() { + return keyPrefix; + } + + public void setKeyPrefix(String keyPrefix) { + this.keyPrefix = keyPrefix; + } + public Mode getMode() { return mode; } diff --git a/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/handler/NameMapperHandler.java b/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/handler/NameMapperHandler.java new file mode 100644 index 00000000..0c770b96 --- /dev/null +++ b/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/handler/NameMapperHandler.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.continew.starter.cache.redisson.handler; + +import cn.hutool.core.text.CharSequenceUtil; +import org.redisson.api.NameMapper; + +/** + * 缓存名称映射处理器 + * + * @author Charles7c + * @since 2.11.0 + */ +public class NameMapperHandler implements NameMapper { + + private final String keyPrefix; + + public NameMapperHandler(String keyPrefix) { + this.keyPrefix = keyPrefix; + } + + @Override + public String map(String name) { + if (CharSequenceUtil.isNotBlank(name) && !name.startsWith(keyPrefix)) { + return keyPrefix + name; + } + return name; + } + + @Override + public String unmap(String name) { + if (CharSequenceUtil.isNotBlank(name) && name.startsWith(keyPrefix)) { + return name.substring(keyPrefix.length()); + } + return name; + } +}