开发者

Spring的RedisTemplate存储的key和value有特殊字符的处理

开发者 https://www.devze.com 2023-12-22 10:20 出处:网络 作者: lkforce
目录Spring RedisTemplate存储的key和value有特殊字符这种特殊字符出现的原因总结Spring RedisTemplate存储的key和value有特殊字符
目录
  • Spring RedisTemplate存储的key和value有特殊字符
  • 这种特殊字符出现的原因
  • 总结

Spring RedisTemplate存储的key和value有特殊字符

Spring的spring-data-redis包下有RedisTemplate类,当调用:

redisTemplate.opsForValue().set("TEST","ABCD");

方法后,Redis里实际保存的key并不完全等于我们预设的key值,而是在key值前面加了一些特殊字符

就像这样的:

"\xacphpxed\x00\x05t\x00\x0cTEST"

而保存的value可能是这样的:

"\xac\xed\x00\x05t\x00\x10cABCD&jsquot;

开头会有类似\xac\xed\x00\x05t\x00\x0c这样的特殊字符。

这种特殊字符出现的原因

是因为RedisTemplate默认使用JdkSerializationRedisSerializer作为序列化工具。

虽然保存的key和我们想象中的不太一样,但是并不影响我们调用

redisTemplate.opsForValue().get("TEST");

去获取之前设置的value,而且得到的value也是正确的,不带特殊字符。

这应该是因为RedisTemplate把查询用的key值进行同样的序列化后再进行查询,所以能成功的找到该条记录,并把value反序列化后编程返回,得到的就是没有特殊字符的value。

如果不想在保存的key和value里包含这种特殊字符,可以手动修改序列化方式

使用以下代码:

@Autowired(required = false)
public void setRedisTemplate(RedisTemplate redisTemplate) {
    RedisSerializer stringSerializer = new StringRedisSerializer();
    redisTemplate.setKeySerializer(stringSerializer);
    redisTemplate.setValueSerializer(stringSerializer);
    redisTemplate.setHashKeySerializer(stringSerializer);
    redisTemplate.setHashValueSerializer(sandroidtringSerializer);
    this.redisTemp编程客栈late = redisTemplate;
}

注意:

方法前面的@Autowired注解是需要加的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号