当前位置: 移动技术网 > IT编程>开发语言>Java > springboot整合spring-data-redis遇到的坑

springboot整合spring-data-redis遇到的坑

2019年07月22日  | 移动技术网IT编程  | 我要评论

描述

使用springboot整合redis,使用默认的序列化配置,然后使用redis-client去查询时查询不到相应的key.

使用工具发现,key的前面多了\xac\xed\x00\x05t\x00!这样一个串.

而且value也是不能直观可见的.

问题所在

使用springdataredis,默认情况下是使用org.springframework.data.redis.serializer.jdkserializationredisserializer这个类来做序列化.

org.springframework.data.redis.core.redistemplate代码块.

 public void afterpropertiesset() {
    super.afterpropertiesset();
    boolean defaultused = false;
    if (defaultserializer == null) {
      defaultserializer = new jdkserializationredisserializer(
          classloader != null ? classloader : this.getclass().getclassloader());
    }
    if (enabledefaultserializer) {
      if (keyserializer == null) {
        keyserializer = defaultserializer;
        defaultused = true;
      }
      if (valueserializer == null) {
        valueserializer = defaultserializer;
        defaultused = true;
      }
      if (hashkeyserializer == null) {
        hashkeyserializer = defaultserializer;
        defaultused = true;
      }
      if (hashvalueserializer == null) {
        hashvalueserializer = defaultserializer;
        defaultused = true;
      }
    }
    if (enabledefaultserializer && defaultused) {
      assert.notnull(defaultserializer, "default serializer null and not all serializers initialized");
    }
    if (scriptexecutor == null) {
      this.scriptexecutor = new defaultscriptexecutor<k>(this);
    }
    initialized = true;
  }

解决

手动设置key的序列化方式为stringredisserializer,强制使用.

由于spring不支持泛型注入,这样会导致所有的redistemplate的key序列方式都为stringredisserializer. 同时,最好在序列化对象保存时候手动将其转为json串后存入redis.易于在可视化工具中直接查看对应value

@bean
  public redistemplate<string, ?> redistemplate(redisconnectionfactory factory) {
    redistemplate<string, object> redistemplate = new redistemplate();
    redistemplate.setconnectionfactory(factory);
    redisserializer<string> stringredisserializer = new stringredisserializer();//long类型不可以会出现异常信息;
    redistemplate.setkeyserializer(stringredisserializer);
    return redistemplate;
  }

以上所述是小编给大家介绍的springboot整合spring-data-redis遇到的坑,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网