問題出現的過程如下:
- 首先使用redis-cli執行
set aaa bbb
- 然後使用spring data redis 默認的序列化器(就是不額外配置,會默認使用JdkSerializationRedisSerializer)
- 使用RedisTemplate執行執行get查詢aaa,會返回null,但是回到redis-cli發現aaa還在
- 使用RT去創建一個 key=aaa v=qqq的kv,然後到redis-cli去查看,發現並沒有覆蓋掉原來的aaa,反而增加了一個\xac\xed\x00\x05t\x00\x03aaa,通過還原發現前面這一串不知名的utf-8是¬ít,這個大概是默認序列化器加上去的。其實值也有同樣的問題。
- 使用GenericToStringSerializer可以解決這個問題,代碼如下
@Bean("redis")
public RedisTemplate<String, String> s() {
RedisTemplate<String, String> redis = new RedisTemplate<>();
redis.setConnectionFactory(redisConnectionFactory());
//這裏設置序列化器
redis.setValueSerializer(new GenericToStringSerializer<String>(String.class));
redis.setKeySerializer(new GenericToStringSerializer<String>(String.class));
return redis;
}
- 蒐羅的一些常用的序列化器
- StringRedisSerializer
- Jackson2JsonRedisSerializer
- GenericToStringSerializer
- OxmSerializer