Redis
 sql >> Database >  >> NoSQL >> Redis

spring-data-redis redisTemplate Eccezione

Per impostazione predefinita, RedisTemplate utilizza un JdkSerializationRedisSerializer, quindi se hai fatto un "set" il tuo Long sarebbe simile a questo in 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"

IncrBy funziona perché Redis restituisce sempre un Long da quell'operazione, quindi RedisTemplate non tenta di deserializzare il risultato. Il risultato di "get", tuttavia, passa attraverso il processo di deserializzazione, che prevede un formato come il precedente.

Puoi risolvere questo problema utilizzando un serializzatore di valore diverso sul tuo RedisTemplate:

redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));

Oppure prova la classe RedisAtomicLong fornita con spring-data-redis.