问题 我们从服务器上看到对应的keys,是这样的
1 2 127.0.0.1:6379 > keys *1 ) "\xac\xed\x00\x05t\x00\x04name"
解决乱码问题 在Spring Boot中集成Redis的乱码问题,通常来说应该是编码问题。
配置RedisTemplate Spring Boot会自动配置RedisTemplate
,但默认情况下,它使用的是JDK的序列化机制,这可能会导致乱码问题。为了防止乱码,你可以自定义RedisTemplate
的配置,使用StringRedisTemplate
,它默认使用StringRedisSerializer
,可以避免乱码问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 @Configuration public class RedisConfig { @Bean("redisTemplate") public RedisTemplate<String, Object> redisTemplate (RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate <>(); template.setConnectionFactory(factory); Jackson2JsonRedisSerializer<Object> Jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer <>(Object.class); ObjectMapper mp = new ObjectMapper (); mp.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mp.activateDefaultTyping(mp.getPolymorphicTypeValidator()); Jackson2JsonRedisSerializer.serialize(mp); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer (); template.setKeySerializer(stringRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); template.setValueSerializer(Jackson2JsonRedisSerializer); template.setHashValueSerializer(Jackson2JsonRedisSerializer); template.setDefaultSerializer(Jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
使用RedisTemplate 在你的服务中注入RedisTemplate
并使用它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Service public class RedisService { @Resource private RedisTemplate redisTemplate; public void set (String key, String value) { redisTemplate.opsForValue().set(key, value); } public String get (String key) { return (String) redisTemplate.opsForValue().get(key); } }
仍然遇到乱码问题 如果你在使用RedisTemplate
时仍然遇到乱码问题,可能是因为Redis服务器的默认编码不是UTF-8。你可以通过修改Redis配置文件(通常是redis.conf
)来设置默认编码为UTF-8:
1 2 3 4 5 6 7 appendonly yesappendfsync everysecclient -output-buffer-limit normal 0 0 0 client -output-buffer-limit slave 256 mb 64 mb 60 client -output-buffer-limit pubsub 32 mb 8 mb 60
redis-cli 中文出现乱码问题解决 redis会将存储的中文数据转成16进制,所以我们在连接控制台的时候将redis-cli改为redis-cli –raw输入进去即可
重启Redis服务后,乱码问题应该会得到解决。
以上步骤应该能帮助你在Spring Boot中集成Redis并解决乱码问题。如果问题依旧存在,可能需要检查Redis服务器的配置或网络传输过程中的编码问题。