feat(cache/redisson): 添加缓存键前缀支持

This commit is contained in:
2025-04-04 18:52:00 +08:00
parent efaef9d7e6
commit 615dfdd03f
3 changed files with 77 additions and 0 deletions

View File

@@ -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()));
}
}
}

View File

@@ -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;
}

View File

@@ -0,0 +1,51 @@
/*
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
* <p>
* 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
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* 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;
}
}