《Redis:小白入门》Springboot整合Redis乱码问题

使用RedisTemplate的set出现乱码问题

解决方案:设置序列化方法

编写配置文件

@Configuration
public class RedisConfig {

    @Autowired
    private RedisTemplate redisTemplate;

    @Bean
    public RedisTemplate redisTemplateInit() {
        //设置序列化Key的实例化对象
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置序列化Value的实例化对象
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
    }

}

这里面大家可能会遇到一些问题
如果出现以下错误,则是少导包了
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

导入以下几个依赖就能正常运行了

		<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>

        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>

        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </dependency>

希望对大家有所帮助

### 解决Spring BootRedis集成时的中文字符编码问题Spring Boot项目中,当使用Redis作为缓存或数据存储时,可能会遇到中文字符显示为乱码的情况。这一现象通常源于序列化/反序列化过程中使用的编解码器配置不当。 对于字符串类型的键值操作,默认情况下,`StringRedisSerializer`采用UTF-8编码来处理字符串,这可以通过调用`RedisSerializer#string()`静态方法获得实例[^2]: ```java static RedisSerializer<String> string() { return StringRedisSerializer.UTF_8; } ``` 然而,在实际开发环境中,如果发现仍然存在乱码,则可能是由于其他部分的数据未被正确设置成UTF-8编码所致。为了确保整个系统的统一性和一致性,建议显式指定所有涉及字符串的操作都应使用相同的编码格式——即UTF-8。 具体到代码层面,可以在配置类中自定义`RedisTemplate`并为其设定合适的序列化策略: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<Object, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); // 设置key和value的序列化方式均为StringRedisSerializer Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.setKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; } } ``` 上述配置不仅指定了键(`setKeySerializer`)使用`StringRedisSerializer`以保证其遵循UTF-8标准,同时也针对值(`setValueSerializer`)选择了JSON形式的序列化工具(这里选用的是Jackson库),从而更好地支持复杂对象结构的同时也保持了良好的可读性。 另外值得注意的一点是在某些特殊场景下可能还会涉及到二进制流或者其他非文本型数据的传输,此时则需考虑更换相应的序列化机制,例如FST或Kryo等高效方案;不过这些替代品往往伴随着额外的学习成本以及潜在的安全隐患,因此除非必要一般推荐继续沿用官方提供的解决方案[^4]。 通过以上措施可以有效避免因编码差异而导致的乱码问题,并且提高了程序的整体健壮性和易维护程度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值