redis key/value 前面出現\xAC\xED\x00\x05t\x00\x05

1.問題現象:

最近使用spring-data-redis 和jedis 操作redis時發現存儲在redis中的key不是程序中設置的string值,前面還多出了許多類似\xac\xed\x00\x05t\x00這種字符串

2.原因:

spring-data-redis的RedisTemplate<K, V>模板類在操作redis時默認使用JdkSerializationRedisSerializer來進行序列化。

  1. public void afterPropertiesSet() {
  2. super.afterPropertiesSet();
  3. boolean defaultUsed = false;
  4. if (defaultSerializer == null) {
  5. defaultSerializer = new JdkSerializationRedisSerializer(
  6. classLoader != null ? classLoader : this.getClass().getClassLoader());
  7. }
  8. if (enableDefaultSerializer) {
  9. if (keySerializer == null) {
  10. keySerializer = defaultSerializer;
  11. defaultUsed = true;
  12. }
  13. if (valueSerializer == null) {
  14. valueSerializer = defaultSerializer;
  15. defaultUsed = true;
  16. }
  17. if (hashKeySerializer == null) {
  18. hashKeySerializer = defaultSerializer;
  19. defaultUsed = true;
  20. }
  21. if (hashValueSerializer == null) {
  22. hashValueSerializer = defaultSerializer;
  23. defaultUsed = true;
  24. }
  25. }
  26. if (enableDefaultSerializer && defaultUsed) {
  27. Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized");
  28. }
  29. if (scriptExecutor == null) {
  30. this.scriptExecutor = new DefaultScriptExecutor<K>(this);
  31. }
  32. initialized = true;
  33. }

 

3.解決方案

  1. redisTemplate所在類加上:
  2. @Autowired(required = false)
  3. public void setRedisTemplate(RedisTemplate redisTemplate) {
  4. RedisSerializer stringSerializer = new StringRedisSerializer();
  5. redisTemplate.setKeySerializer(stringSerializer);
  6. redisTemplate.setValueSerializer(stringSerializer);
  7. redisTemplate.setHashKeySerializer(stringSerializer);
  8. redisTemplate.setHashValueSerializer(stringSerializer);
  9. this.redisTemplate = redisTemplate;
  10. }

 

將redisTemplate默認改爲stringRedis序列化方式。

 

 

另一種方式,因爲我redisTemplate用了@Resource進行了註解,需要上面的序列化才能改。或者把註解改爲@Autowired,不用寫上面那些序列化方法,問題就解決了

發佈了98 篇原創文章 · 獲贊 0 · 訪問量 6009
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章