問題:
在SpringBoot中使用RedisTemplate操作redis時,會出現\xAC\xED\x00\x05t\x00\x08這種亂碼問題,特別是在使用中文時。
原因分析:
原因是因為RedisTemplate中key和value的序列化方式都默認使用了jdk的序列化方式,含有中文時就會出現亂碼。想要解決亂碼問題我們只需要將key和value的序列化方式分別修改為字符串和json的形式即可。
我們增加一個RedisConfig類,用來對RedisTemplate的序列化方式進行修改:
@Configuration
public class RedisConfig {
? ? @Bean
? ? public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
? ? ? ? RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
? ? ? ? redisTemplate.setConnectionFactory(redisConnectionFactory);
? ? ? ? // 設置key的序列化規則和value的序列化規則
? ? ? ? redisTemplate.setKeySerializer(new StringRedisSerializer());
? ? ? ? redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
? ? ? ? redisTemplate.afterPropertiesSet();
? ? ? ? return redisTemplate;
? ? }
}
問題解決,可以寫幾個單元測試方法測試一下。