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.