Spring的RedisTemplate存储的key和value有特殊字符的处理
Spring RedisTemplate存储的key和value有特殊字符
Spring的spring-data-redis包下有RedisTemplate类,当调用:
redisTemplate.opsForValue().set("TEST","ABCD");方法后,Redis里实际保存的key并不完全等于我们预设的key值,而是在key值前面加了一些特殊字符
就像这样的:
"\xac\xed\x00\x05t\x00\x0cTEST"
而保存的value可能是这样的:
"\xac\xed\x00\x05t\x00\x10cABCD"
开头会有类似\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(stringSerializer);
this.redisTemplate = redisTemplate;
}注意:
方法前面的@Autowired注解是需要加的。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
java 获取HttpRequest Header的几种方法(必看篇)
下面小编就为大家带来一篇java 获取HttpRequest Header的几种方法(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-09-09
解决javac不是内部或外部命令,也不是可运行程序的报错问题
在学着使用Java的命令行来编译java文件的时候,遇到了这个问题,本文主要介绍了解决javac不是内部或外部命令,也不是可运行程序的报错问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-04-04
java自带的MessageDigest实现文本的md5加密算法
这篇文章主要介绍了java自带的MessageDigest实现文本的md5加密算法,需要的朋友可以参考下2015-12-12
基于Spring概念模型:PathMatcher 路径匹配器
这篇文章主要介绍了Spring概念模型:PathMatcher 路径匹配器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09
spring中@autowired、@Qualifier、@Primary注解的使用说明
这篇文章主要介绍了spring中@autowired、@Qualifier、@Primary注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11


最新评论