Secara default, RedisTemplate menggunakan JdkSerializationRedisSerializer, jadi jika Anda melakukan "set" itu akan membuat Long Anda terlihat seperti ini di 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 berfungsi karena Redis selalu mengembalikan Long dari operasi itu, jadi RedisTemplate tidak mencoba untuk membatalkan serialisasi hasilnya. Hasil dari "get", bagaimanapun, melewati proses deserialisasi, yang mengharapkan format seperti di atas.
Anda dapat mengatasi ini dengan menggunakan serializer nilai yang berbeda pada RedisTemplate Anda:
redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));
Atau coba kelas RedisAtomicLong yang disertakan dengan spring-data-redis.