redis 的key 前面为啥有"\xac\xed\x00\x05t\x00\
时间: 2023-09-28 18:03:41 浏览: 58
Redis的key前面出现"\xac\xed\x00\x05t\x00"这样的乱码是因为RedisTemplate使用了默认的JdkSerializationRedisSerializer对key进行序列化。这个序列化方式会在key的前面添加这个乱码标识。
为了解决这个问题,可以通过设置RedisTemplate的key的序列化规则为StringRedisSerializer来解决。在代码中,可以使用以下方式来设置key的序列化规则:
redisTemplate.setKeySerializer(new StringRedisSerializer());
这样设置之后,再次查询新存入的redisKey就会恢复正常,不再出现乱码的前缀了。
相关问题
java存入redis的key有\xac\xed\x00\x05t\x007前缀
这个前缀是因为Java中的字符串默认采用UTF-8编码,而Redis中的key是二进制安全的,所以在将Java字符串存入Redis时,需要将其转换为二进制格式。而在UTF-8编码中,每个字符占用的字节数不同,所以需要在字符串前面添加一个特殊的前缀来标识其长度。
具体来说,\xac\xed\x00\x05t\x007这个前缀是由Java序列化机制生成的,其中\xac\xed是Java序列化机制的魔数,\x00\x05表示后面的字符串长度为5,t\x007则是字符串本身。
redis key \xAC\xED\x00\x05t\x00\x
redis key \xAC\xED\x00\x05t\x00\x 是一个使用ISO-8859-1编码的乱码。通常,当Redis的key或value包含非ASCII字符时,会使用序列化方法对其进行编码和解码。在默认情况下,Spring会使用JdkSerializationRedisSerializer对key和value进行序列化操作。为了解决这个问题,可以添加一个Redis配置类,并设置使用StringRedisSerializer作为序列化方式。具体的配置如下所示:
@Configuration
public class RedisConfig {
@Bean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
template.setConnectionFactory(factory);
// key序列化方式
template.setKeySerializer(redisSerializer);
// value序列化
template.setValueSerializer(redisSerializer);
// value hashmap序列化
template.setHashValueSerializer(redisSerializer);
// key hashmap序列化
template.setHashKeySerializer(redisSerializer);
return template;
}
}