序列化终究的目标是为了对象能够跨平台存储,和举行收集传输。而我们举行跨平台存储和收集传输的体式格局就是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网别的相干文章!