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

Spring-data-redis redisTemplate Exception


Por padrão, o RedisTemplate usa um JdkSerializationRedisSerializer, portanto, se você fizer um "set", seu Long ficará assim no Redis:
"\xac\xed\x00\x05sr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\x00\x00\x00\x00\x04"

O IncrBy funciona porque o Redis sempre retorna um Long dessa operação, portanto, o RedisTemplate não tenta desserializar o resultado. O resultado do "get", porém, passa pelo processo de desserialização, que espera um formato como o acima.

Você pode resolver isso usando um serializador de valor diferente em seu RedisTemplate:
redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));

Ou experimente a classe RedisAtomicLong que vem com spring-data-redis.