Redis
 sql >> Base de données >  >> NoSQL >> Redis

Exception redisTemplate spring-data-redis

Par défaut, RedisTemplate utilise un JdkSerializationRedisSerializer, donc si vous faisiez un "set", votre Long ressemblerait à ceci dans 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 fonctionne car Redis renvoie toujours un Long à partir de cette opération, donc RedisTemplate ne tente pas de désérialiser le résultat. Le résultat de "get", cependant, passe par le processus de désérialisation, qui attend un format comme ci-dessus.

Vous pouvez résoudre ce problème en utilisant un sérialiseur de valeur différent sur votre RedisTemplate :

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

Ou essayez la classe RedisAtomicLong fournie avec spring-data-redis.