Domyślnie RedisTemplate używa JdkSerializationRedisSerializer, więc jeśli zrobisz „ustawienie”, sprawi to, że Twój Long będzie wyglądał mniej więcej tak w 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 działa, ponieważ Redis zawsze zwraca Long z tej operacji, więc RedisTemplate nie próbuje deserializacji wyniku. Jednak wynik "get" przechodzi przez proces deserializacji, który oczekuje formatu takiego jak powyżej.
Możesz rozwiązać ten problem, używając innego serializatora wartości w swoim RedisTemplate:
redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));
Lub wypróbuj klasę RedisAtomicLong, która jest dostarczana z spring-data-redis.