Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Secando um RedisTemplate genérico na primavera 4


Eu tive o mesmo problema. Você pode criar um bean genérico para isso e usar o GenricJackson2JsonRedisSerializer. O problema é que usando isso o json será salvo com alguns dados extras para que a desserialização funcione mais tarde.

Outra maneira seria usar o Jackson2JsonRedisSerializer, mas ele precisa da instância Class do tipo genérico para funcionar, o que não consegui descobrir como obter.
@Bean("objectRedisTemplate")
public <T> RedisTemplate<String, T> objectRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate<String, T> redisTemplate = new RedisTemplate<>();

    redisTemplate.setConnectionFactory(redisConnectionFactory);

    RedisSerializer<String> serializer = new StringRedisSerializer();
    redisTemplate.setKeySerializer(serializer);
    redisTemplate.setHashKeySerializer(serializer);

    redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

    return redisTemplate;
}

Uso na classe de cache:
@Autowired
@Qualifier("objectRedisTemplate")
private RedisTemplate<String, MyTypeA> redisTemplate;