Der ultimative Zweck der Serialisierung besteht darin, die plattformübergreifende Speicherung von Objekten und die Übertragung über das Netzwerk zu ermöglichen. Die Art und Weise, wie wir plattformübergreifende Speicherung und Netzwerkübertragung durchführen, ist IO, und das von unserem IO unterstützte Datenformat ist Byte-Array. (Empfohlenes Lernen:
Vergleich der Redis-Serialisierungsmethoden:
Die Standardmethode von Redis ist JdkSerializationRedisSerializer
JdkSerializationRedisSerializer: Verwenden Sie die von bereitgestellte Serialisierung JDK-Funktion.Der Vorteil besteht darin, dass Sie beim Deserialisieren keine Typinformationen (Klasse) angeben müssen. Der Nachteil besteht jedoch darin, dass Sie die Serializable-Schnittstelle implementieren müssen und das serialisierte Ergebnis sehr groß ist , im JSON-Format 5. Dies verbraucht in der Regel viel Speicher des Redis-Servers.
Jackson2JsonRedisSerializer: Verwenden Sie die Jackson-Bibliothek, um Objekte in JSON-Strings zu serialisieren.
Der Vorteil besteht darin, dass es schnell ist, die serialisierte Zeichenfolge kurz und prägnant ist und keine Notwendigkeit besteht, die Serializable-Schnittstelle zu implementieren. Aber der Nachteil ist auch sehr fatal, das heißt, im Konstruktor dieser Klasse gibt es einen Typparameter, und die Typinformationen des zu serialisierenden Objekts (.class-Objekt) müssen bereitgestellt werden. Bei der Betrachtung des Quellcodes haben wir festgestellt, dass er während des Deserialisierungsprozesses nur Typinformationen verwendet. Problem: Bei Verwendung der standardmäßigen JDK-Serialisierungsmethode werden beim Anzeigen des k-v-Werts im RDM-Tool „verstümmelte Zeichen“ angezeigt, was unpraktisch ist.Lösung: Passen Sie die Serialisierungsmethode an, verwenden Sie Jackson2JsonRedisSerializer
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * Redis配置 * * @author LinJie */ @Configuration public class RedisConfig { /** * Redis repository redis repository. * * @param redisTemplate the redis template * @return the redis repository */ @Bean public RedisRepository redisRepository(RedisTemplate redisTemplate) { // 使用Jackson2JsonRedisSerialize 替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key采用String的序列化方式 redisTemplate.setKeySerializer(stringRedisSerializer); // hash的key也采用String的序列化方式 redisTemplate.setHashKeySerializer(stringRedisSerializer); // value序列化方式采用jackson redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // hash的value序列化方式采用jackson redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return new RedisRepository(redisTemplate); } }Weitere technische Artikel zu Redis finden Sie im
Tutorial zur Einführung in die Redis-Datenbanknutzung Kolumne Fang an zu lernen!
Das obige ist der detaillierte Inhalt vonWarum muss Redis serialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!