Java 中 redistemple 存值取值时key前边自动添加了一串\xAC\xED\x00\x05t\x00\x0B 怎么去掉
时间: 2023-11-06 16:08:05 浏览: 153
这个问题可能是因为在序列化和反序列化过程中出现了问题,导致 key 值前面添加了一些二进制字符。可以尝试使用 String 的 replace 方法将这些字符替换为空字符串,例如:
```
String key = "...\xAC\xED\x00\x05t\x00\x0B...";
key = key.replace("\xAC\xED\x00\x05t\x00\x0B", "");
```
如果这个方法不行,可以尝试使用正则表达式来匹配这些二进制字符并替换为空字符串。
相关问题
redistemple 存值取值时key前边自动添加了一串\xAC\xED\x00\x05t\x00\x0B 怎么去掉
这个问题可能是因为你使用了Python的pickle序列化方式,而不是普通的字符串。pickle序列化后的数据会包含一些额外的信息,其中就包括了这个\xAC\xED\x00\x05t\x00\x0B。如果你想要去掉这个信息,可以使用decode()方法将其转换为字符串,例如:
```
import pickle
# 存储数据
data = {'name': 'Alice', 'age': 18}
r.set('mykey', pickle.dumps(data))
# 获取数据
result = r.get('mykey')
result_str = result.decode() # 将bytes转换为字符串
data = pickle.loads(result_str)
print(data)
```
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;
}
}
阅读全文