spring-data-redis redisTemplate Exception

jedis, redis, spring, spring-data-redis

Solution

By default, RedisTemplate uses a JdkSerializationRedisSerializer, so if you did a "set" it would make your Long look something like this in 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 works because Redis always returns a Long from that operation, so RedisTemplate does not attempt to deserialize the result. The result of "get", however, goes through the deserialization process, which expects a format like the above.

You can solve this by using a different value serializer on your RedisTemplate:

redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));

Or try the RedisAtomicLong class that comes with spring-data-redis.

Problem

When I call get() method, an exception occured here is the code ``` @Service("RedisService") public class RedisServiceImpl implements RedisService { @Autowired RedisTemplate<String, Long> redisTemplate; @Override public Long get(String key) { return redisTemplate.opsForValue().get(key); } @Override public Long incrBy(String key, long increment) { return redisTemplate.opsForValue().increment(key, increment); } ``` when I use incrBy method, there are no exceptions but only errors only get method here is the stacktrace --- ``` java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279) at org.springframework.core.serializer.DefaultDeserializer.deserialize(DefaultDeserializer.java:38) at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:58) at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:1) at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:40) at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:198) at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:50) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:162) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:133) at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:84) at org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:42) at net.daum.air21.bot.common.service.RedisServiceImpl.get(RedisServiceImpl.java:29) at net.daum.air21.bot.user.service.SeraCoffeeServiceImpl.getCurrentCount(SeraCoffeeServiceImpl.java:41) ```

Original source