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

 

以上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章