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註解是需要加的。
以上