Redis
 sql >> Datenbank >  >> NoSQL >> Redis

spring-data-redis redisTemplate-Ausnahme

Standardmäßig verwendet RedisTemplate einen JdkSerializationRedisSerializer. Wenn Sie also ein „Set“ vornehmen, würde Ihr Long in Redis in etwa so aussehen:

"\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 funktioniert, weil Redis immer ein Long von dieser Operation zurückgibt, sodass RedisTemplate nicht versucht, das Ergebnis zu deserialisieren. Das Ergebnis von "get" durchläuft jedoch den Deserialisierungsprozess, der ein Format wie das obige erwartet.

Sie können dies lösen, indem Sie in Ihrem RedisTemplate einen anderen Wertserialisierer verwenden:

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

Oder probieren Sie die RedisAtomicLong-Klasse aus, die mit spring-data-redis geliefert wird.