Theo mặc định, RedisTemplate sử dụng JdkSerializationRedisSerializer, vì vậy nếu bạn đã đặt một "bộ", nó sẽ làm cho Long của bạn trông giống như thế này trong 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 hoạt động vì Redis luôn trả về một Long từ thao tác đó, vì vậy RedisTemplate không cố gắng giải mã kết quả. Tuy nhiên, kết quả của "get" sẽ trải qua quá trình giải mã hóa, quá trình này mong đợi một định dạng như trên.
Bạn có thể giải quyết vấn đề này bằng cách sử dụng bộ tuần tự hóa giá trị khác trên RedisTemplate của mình:
redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));
Hoặc thử lớp RedisAtomicLong đi kèm với spring-data-redis.