问一个问题,求大佬解答。

88 阅读1分钟

问题是这样的:

首先在云服务器的docker里面启动了一个redis镜像,然后再SpringBoot项目中连接使用。本来正常情况下是没问题的,因为我服务器控制台里面端口也打开了,本地连接也没问题。然后就使用,这个时候可以用,但是当我给redis进行序列化配置后,这个项目就启动不了了,一直就是连接失败,并且是localhost:6379连接失败,但是我用的是远程服务器啊,为什么会localhost呢?

** 序列化代码
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
    return new LettuceConnectionFactory();
}

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
    FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            // 默认缓存时间
            .entryTtl(Duration.ofSeconds(600))
            // 设置key的序列化方式
            .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer))
            // 设置value的序列化方式
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer));
    RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory)
            .cacheDefaults(config)
            .transactionAware()
            .build();
    return redisCacheManager;
}

@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
    // 使用fastJson序列化
    FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
    // value值的序列化采用fastJsonRedisSerializer
    redisTemplate.setValueSerializer(fastJsonRedisSerializer);
    redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
    // 全局开启AutoType,不建议使用
    ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
    // 建议使用这种方式,小范围指定白名单,需要序列化的类
    //ParserConfig.getGlobalInstance().addAccept("xhu.xl.poke_back.pojo");
    // key的序列化采用StringRedisSerializer
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    redisTemplate.setConnectionFactory(redisConnectionFactory);
    return redisTemplate;
}

** FastJsonRedisSerializer中代码
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

private Class<T> clazz;

public FastJsonRedisSerializer(Class<T> clazz) {
    super();
    this.clazz = clazz;
}

@Override
public byte[] serialize(T t) throws SerializationException {
    if (t == null) {
        return new byte[0];
    }
    // byte[] bytes = JSON.toJSONString(t, SerializerFeature.WriteClassName, ).getBytes(DEFAULT_CHARSET);
    byte[] bytes = JSON.toJSONString(t, SerializerFeature.WriteClassName,
            // 是否输出值为null的字段,默认为false
            SerializerFeature.WriteMapNullValue,
            // List字段如果为null,输出为[],而非null
            SerializerFeature.WriteNullListAsEmpty).getBytes(DEFAULT_CHARSET);
    return bytes;
}

@Override
public T deserialize(byte[] bytes) throws SerializationException {
    if (bytes == null || bytes.length <= 0) {
        return null;
    }
    String str = new String(bytes, DEFAULT_CHARSET);
    return (T) JSON.parseObject(str, clazz);
}

错误截图:

image.png