Die ursprüngliche Serialisierungslösung des Projekts verwendete die JDK-Serialisierungsklasse, aber das Speichern in Redis führt zu verstümmeltem Code, der unpraktisch anzuzeigen und zu verwalten ist.
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { redisTemplate.setKeySerializer(new JdkSerializationRedisSerializer(Object.class.getClassLoader())); redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer(Object.class.getClassLoader())); redisTemplate.setHashKeySerializer(new JdkSerializationRedisSerializer(Object.class.getClassLoader())); redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer(Object.class.getClassLoader())); this.redisTemplate = redisTemplate; }
Nach der Online-Überprüfung liegt es am Serialisierungsklassenproblem. Wir verwenden nicht die Serialisierungsmethode von JDK und verwenden das JSON-Format
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); this.redisTemplate = redisTemplate; }
#🎜🎜 #Fügen Sie dann die Redis-Konfiguration in application.yml hinzu:
Hinweis: Hier gibt es einige zusätzliche Konfigurationen, z. B. das Passwort usw. Ich werde es hier nicht aufschreiben, um Ärger zu vermeiden.
Jetzt können wir die Testklasse schreiben
Nach dem Testen haben wir ein Problem wie test:1 festgestellt . . Als ich zum Beispiel das Tool
Another.Redis.Desktop.Manager zum Anzeigen verwendete, stellte ich fest, dass es sich in eine Reihe seltsamer Zeichenfolgen verwandelte.
ist verstümmelt.
Dies wird durch die Standard-Serialisierungsregeln von Redis verursacht. Alle Standard-Serialisierungsregeln von RedisTemplate sind JDKSerializer, und die Standard-Serialisierungsregeln von StringRedisTemplate sind StringRedisSerializer.
Details finden Sie im Bild unten.
Wir brauchen um es zu tun Konfiguration
package com.eknown.config; 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.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * redis配置 * 主要是配置Redis的序列化规则,用Jackson2JsonRedisSerializer替换默认的jdkSerializer * @author zhangfanghao * @version 1.0 * @date 2019-07-21 21:04 */ @Configuration public class RedisConfig { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); // 使用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); // 设置key和value的序列化规则 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
Das obige ist der detaillierte Inhalt vonSo lösen Sie verstümmelten Redis-Serialisierungscode unter SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!