//redis配置
RedisStandaloneConfiguration redisConfiguration = new RedisStandaloneConfiguration("xxx.xx.xx.xx",6379);
redisConfiguration.setDatabase(0);
redisConfiguration.setPassword("xxxxx");
//连接池配置
GenericObjectPoolConfig<RedisConnectionFactory> genericObjectPoolConfig = new GenericObjectPoolConfig<>();
genericObjectPoolConfig.setMaxIdle(10);
genericObjectPoolConfig.setMinIdle(10);
genericObjectPoolConfig.setMaxTotal(20);
genericObjectPoolConfig.setMaxWaitMillis(3000);
// redis客户端配置
LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder
builder = LettucePoolingClientConfiguration.builder().
commandTimeout(Duration.ofMillis(3000));
builder.shutdownTimeout(Duration.ofMillis(3000));
builder.poolConfig(genericObjectPoolConfig);
LettuceClientConfiguration lettuceClientConfiguration = builder.build();
// 根据配置和客户端配置创建连接
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisConfiguration,lettuceClientConfiguration);
lettuceConnectionFactory.afterPropertiesSet();
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
AllocationDTO dto = new AllocationDTO();
dto.setNumber(10);
dto.setOperator("123456");
dto.setInId(10);
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
redisTemplate.afterPropertiesSet();
redisTemplate.opsForValue().set("test",dto,10,TimeUnit.SECONDS);
Object value = redisTemplate.opsForValue().get("test");
System.out.println(value);
以上是我的RedisTempate
的配置信息,我存入的是一个AllocationDTO.class
对象,但是在取出的时候,确变成了LinkedHashMap
对象,我希望能够让获取到的对象直接是
AllocationDTO.class
而不需要再次做任何转换,请问这种应该如何配置实现呢? 存储的class不国定,所以设置默认类型 可能不能够做到通用
正好在看相关的知识点:
Jackson2JsonRedisSerializer
是需要每个缓存都要指定具体的类的:GenericJackson2JsonRedisSerializer
作为序列化类,这个在缓存中存储相关类名,所以不需要每个缓存都指定具体类。JdkSerializationRedisSerializer
序列化类。参考:跨工程Redis缓存的序列化问题