Heim >Datenbank >Redis >Warum muss Redis serialisiert werden?

Warum muss Redis serialisiert werden?

(*-*)浩
(*-*)浩Original
2019-11-22 10:33:049012Durchsuche

Warum muss Redis serialisiert werden?

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: Redis-Video-Tutorial )

Durch das oben Gesagte wissen Sie meiner Meinung nach bereits, dass alle Daten, die „plattformübergreifend gespeichert“ und „Netzwerkübertragung“ sein müssen, serialisiert werden müssen .

Im Wesentlichen erfordern sowohl die Speicherung als auch die Netzwerkübertragung das Speichern eines Objektstatus in einem plattformübergreifend anerkannten Byteformat, und dann können andere Plattformen Objektinformationen über Byteinformationen analysieren und wiederherstellen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn