问题

我们从服务器上看到对应的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);


//Json序列化配置
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);

//Spring的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
//hash的key也采用string的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//valye的序列化方式采用的是jackson
template.setValueSerializer(Jackson2JsonRedisSerializer);
//hash的value序列化方式采用jackson
template.setHashValueSerializer(Jackson2JsonRedisSerializer);
// 设置其他的k-v的默认的序列化
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
# redis.conf
appendonly yes
appendfsync everysec
# 设置Redis的默认编码为UTF-8
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

redis-cli 中文出现乱码问题解决

redis会将存储的中文数据转成16进制,所以我们在连接控制台的时候将redis-cli改为redis-cli –raw输入进去即可

重启Redis服务后,乱码问题应该会得到解决。

以上步骤应该能帮助你在Spring Boot中集成Redis并解决乱码问题。如果问题依旧存在,可能需要检查Redis服务器的配置或网络传输过程中的编码问题。


本站由 Natuie 使用 Stellar 1.26.8 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站总访问量次 | 本站总访客数人次
载入天数...载入时分秒...