По подразбиране RedisTemplate използва JdkSerializationRedisSerializer, така че ако сте направили „настройка“, това ще направи вашия Long да изглежда по следния начин в 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 работи, защото Redis винаги връща Long от тази операция, така че RedisTemplate не се опитва да десериализира резултата. Резултатът от „get“ обаче преминава през процеса на десериализация, който очаква формат като горния.
Можете да разрешите това, като използвате различен сериализатор на стойности във вашия RedisTemplate:
redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));
Или опитайте класа RedisAtomicLong, който идва с spring-data-redis.