redis key的前缀统一设置

在多业务线的开发中,Redis Key的前缀管理变得复杂。为了解决这一问题,文章提出了一种思路,即在Java数据序列化时自动添加指定的业务线前缀,从而简化开发者的操作。

开发过程中经常会遇到设置redis key前缀的场景,尤其是有多条业务线,op都会给各条业务线分配特定的前缀,例如:baidu:baijiayun:xxxxx ,开发者每次拼接key的时候都要去拼接该前缀,很是麻烦,这里提供一种思路,java数据传输之前要通过,某种方式(各种序列化框架)序列化,此时可以在业务完成之后,在序列化的时候将前缀加进去

@Configuration
public class AlyRedisConfigration {

    @Value("${redis.commonPrefix}")
    private String prefix;

    @Bean
    @ConfigurationProperties(prefix = "redis")
    public SingleRedisConfig alyRedisConfiguration() {
        return new SingleRedisConfig();
    }

    @Bean("alyConnectionFactory")
    public LettuceConnectionFactory alyConnectionFactory(SingleRedisConfig alyRedisConfiguration) {
        return alyRedisConfiguration.getConnectionFactory();
    }

    @Bean
    public AlyRedisTemplate alyRedisTemplate(
        @Qualifier("alyConnectionFactory") LettuceConnectionFactory alyConnectionFactory) {
        AlyRedisTemplate alyRedisTemplate = new AlyRedisTemplate();

        alyRedisTemplate.setConnectionFactory(alyConnectionFactory);
        alyRedisTemplate.setKeySerializer(prefixRedisSerializer());
        return alyRedisTemplate;
    }

    private RedisSerializer<String> prefixRedisSerializer() {
        return new PrefixRedisSerializer(prefix);
    }

    /**
     * 给redis的key加上前缀,如果不需要前缀,可以通过Template的execute方法直接调用connection里的操作。
     */
    static class PrefixRedisSerializer implements RedisSerializer<String> {
        private final RedisSerializer<String> delegate = RedisSerializer.string();

        private final String prefix;

        public PrefixRedisSerializer(String prefix) {
            this.prefix = prefix;
        }

        @Override
        public byte[] serialize(String s) throws SerializationException {
            return delegate.serialize(prefix + s);
        }

        @Override
        public String deserialize(byte[] bytes) throws SerializationException {
            return delegate.deserialize(bytes);
        }
    }

}

在 Spring Boot 系统中,有多种统一配置 Rediskey 前缀的方法,以下是一些常见的实现方式: #### 自定义 RedisTemplate 配置 可以创建一个配置类,在其中对 `RedisTemplate` 进行配置,通过自定义序列化器来添加 key 前缀。以下是示例代码: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { private static final String KEY_PREFIX = "yourSystemPrefix:"; @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); // 自定义 key 序列化器,添加前缀 StringRedisSerializer keySerializer = new StringRedisSerializer() { @Override public byte[] serialize(String key) { return super.serialize(KEY_PREFIX + key); } }; template.setKeySerializer(keySerializer); template.setValueSerializer(new StringRedisSerializer()); template.setHashKeySerializer(keySerializer); template.setHashValueSerializer(new StringRedisSerializer()); return template; } } ``` 通过这种方式,所有使用该 `RedisTemplate` 存储的 key 都会自动加上指定的前缀。 #### 使用 CacheManager 配置 如果使用 Spring Cache 来管理缓存,可以通过配置 `CacheManager` 来统一添加 key 前缀。示例如下: ```java import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; import java.time.Duration; @Configuration @EnableCaching public class CacheConfig { private static final String KEY_PREFIX = "yourSystemPrefix:"; @Bean public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(30)) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .prefixKeysWith(KEY_PREFIX); return RedisCacheManager.builder(redisConnectionFactory) .cacheDefaults(cacheConfiguration) .build(); } } ``` 使用上述配置后,Spring Cache 所管理的缓存 key 都会自动添加指定的前缀
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值