Redis序列化配置

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<?, ?> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // Key序列话
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);

        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        // value序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);


        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }
}

 

### Redis 序列化配置教程 在 Spring Boot 中集成 Redis 并对其进行序列化配置是一项常见的需求。以下是关于如何设置 Redis 序列化的详细介绍。 #### 一、Spring Boot 集成 Redis 的默认行为 当 Spring Boot 集成 Redis 后,默认情况下,如果未指定任何自定义序列化器,则会使用 `JDKSerializationRedisSerializer` 进行键值的序列化和反序列化操作[^2]。这种默认的行为可能会导致存储的数据难以阅读或调试,因此通常建议开发者手动配置适合项目的序列化方式。 #### 二、常见序列化方式及其特点 1. **StringRedisSerializer** - 将字符串类型的 key 和 value 转换为字节数组。 - 使用场景:适用于简单的字符串数据存储。 - 示例代码如下: ```java @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new GenericJackson2JsonSerializer()); template.setConnectionFactory(connectionFactory); return template; } ``` 2. **GenericJackson2JsonSerializer** - 基于 Jackson JSON 库实现的对象序列化工具。 - 特点:能够将复杂对象转化为易于理解的 JSON 字符串形式。 - 推荐用于需要跨平台兼容性的项目中。 3. **JdkSerializationRedisSerializer** - 默认使用的 JDK 自带序列化机制。 - 缺点:生成的结果较难解析,且依赖 Java 类的具体结构。 4. **OxmSerializer (MappingJackson2HttpMessageConverter)** - 支持 XML/JSON 数据格式之间的相互转换。 - 主要应用于 RESTful API 开发环境下的数据交换过程之中。 #### 三、具体实施步骤 为了更好地控制 Redis 存储的内容以及提高性能表现,可以通过以下方式进行调整: ##### 设置 Key Serializer 推荐采用 `StringRedisSerializer` 来处理所有的 keys,因为它们通常是人类可读的文字描述而非复杂的实体类实例[^1]^。 ##### 设置 Value Serializer 对于 values 则可以根据实际业务需求灵活选用不同的 serializer。如果是纯文本信息可以直接沿用 string 类型;而对于那些包含多个属性字段的对象则更适合运用 json 格式的表达方式[^3]^。 ```java @Bean public RedisCacheConfiguration cacheConfig() { return RedisCacheConfiguration.defaultCacheConfig() .serializeKeysWith(SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(SerializationPair.fromSerializer(new GenericJackson2JsonSerializer())); } ``` 以上代码片段展示了如何创建一个新的缓存配置实例,并分别指定了 Keys 和 Values 所需应用的不同种类的 serializers。 #### 四、注意事项 - 如果计划长期维护应用程序,请始终考虑未来可能的变化因素并据此选择最合适的解决方案。 - 对于某些特殊字符组成的 keys ,最好提前做好转义工作以免引发不必要的错误提示消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值