序列化终究的目标是为了对象能够跨平台存储,和举行收集传输。而我们举行跨平台存储和收集传输的体式格局就是IO,而我们的IO支撑的数据花样就是字节数组。 (引荐进修:Redis视频教程)
经由历程上面我想你已知道了通常须要举行“跨平台存储”和”收集传输”的数据,都须要举行序列化。
本质上存储和收集传输 都须要经由 把一个对象状况保留成一种跨平台辨认的字节花样,然后其他的平台才能够经由历程字节信息剖析复原对象信息。
redis序列化体式格局对照:
redis的默许体式格局是JdkSerializationRedisSerializer
JdkSerializationRedisSerializer: 运用JDK供应的序列化功用。
长处是反序列化时不须要供应范例信息(class),但瑕玷是须要完成Serializable接口,另有序列化后的效果异常巨大,是JSON花样的5倍摆布,如许就会斲丧redis服务器的大批内存。
Jackson2JsonRedisSerializer: 运用Jackson库将对象序列化为JSON字符串。
长处是速度快,序列化后的字符串短小精悍,不须要完成Serializable接口。
但瑕玷也异常致命,那就是此类的组织函数中有一个范例参数,必需供应要序列化对象的范例信息(.class对象)。 经由历程检察源代码,发明其只在反序列化历程顶用到了范例信息。
题目:运用默许的JDK序列化体式格局,在RDM东西中检察k-v值时会涌现“乱码”,不方便检察。
处理:自定义系列化体式格局,运用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); } }
更多Redis相干技术文章,请接见Redis数据库运用入门教程栏目举行进修!
以上就是redis为何要序列化的细致内容,更多请关注ki4网别的相干文章!