【数据库】redis为何要序列化

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值