Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Por qué es necesario serializar Redis?

¿Por qué es necesario serializar Redis?

El objetivo final de la serialización es lograr el almacenamiento multiplataforma y la transmisión de objetos en red. La forma en que logramos esto es IO, y el formato de datos admitido por IO es una matriz de bytes. (Aprendizaje recomendado: video tutorial de Redis)

A través del contenido anterior, creo que ya sabe que todos los datos que requieren "almacenamiento multiplataforma" y "transmisión de red" deben serializarse.

Esencialmente, tanto el almacenamiento como la transmisión de red requieren que el estado de un objeto se guarde en un formato de bytes reconocible entre plataformas para que otras plataformas puedan recuperar información del objeto analizando la información de bytes.

Comparación de métodos de serialización de Redis:

El método predeterminado de Redis es JdkSerializationRedisSerializer

JdkSerializationRedisSerializer: utilice la función de serialización proporcionada por JDK.

La ventaja es que no es necesario proporcionar información de tipo (clase) al deserializar, pero la desventaja es que es necesario implementar la interfaz Serializable y el resultado de la serialización es muy grande, aproximadamente 5 veces mayor. de formato JSON, que consumirá mucha memoria del servidor redis.

Jackson2JsonRedisSerializer: utiliza la biblioteca Jackson para serializar objetos en cadenas JSON.

Sus ventajas son que es rápido, la cadena serializada es corta y no necesita implementar la interfaz Serializable.

Pero la desventaja también es fatal, es decir, el constructor de este tipo tiene un parámetro de tipo y debes proporcionar la información del tipo del objeto a serializar (objeto .class). Al observar el código fuente, descubrí que solo usa la información de tipo durante la deserialización.

Problema: al utilizar el método de serialización JDK predeterminado, aparecerán "caracteres confusos" al visualizar los valores k-v en la herramienta RDM, lo que dificulta la visualización.

Solución: personalizar el método de serialización para usar Jackson2JsonRedisSerializer

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.ObjectMapper

;

p>

importar org.springframework.context.annotation.Bean;

importar org.springframework.context.annotation.Configuration

importar org.springframework.data; .redis.core.RedisTemplate;

importar org.springframework.data.redis.serializer.

importar org.springframework.data.redis.serializer.StringRedisSerializer;

/ **

* Configuración de Redis

*

* @author LinJie

*/

@Configuration

clase pública RedisConfig {

/**

* Repositorio de Redis Repositorio de Redis.

*

* @ param redisTemplate plantilla de redis

* @return redis repository

*/

@Bean

public RedisRepository redisRepository(RedisTemplate redisTemplate ) {

// Utilice Jackson2JsonRedisSerialize para reemplazar la serialización predeterminada

Jackson2JsonRedisSerializer Jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object. class);

ObjectMapper objectMapper = new ObjectMapper();

objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);