从Java数据序列化 到 redis数据序列化

从Java数据序列化–>redis数据序列化(重点哦)

Java数据序列化参考:https://blog.youkuaiyun.com/kali_Ma/article/details/121973144

redis数据序列化参考(重要!):https://blog.youkuaiyun.com/weixin_46008204/article/details/103507231

java数据序列化
  • 将对象转化成一个字节序列(二进制数据)的过程。

你先告诉我为什么要有序列化?

对象可以转化为可以传输,存储的对象

正常一个对象,只能存在于程序运行时,当程序运行结束了,对象就消失了,对象只在程序运行时存在

  • 现在有个需求,我想把user对象(包含了名字,年龄,身高,简历信息)传给数据持久化的服务,这里使用redis(保存数据的服务)。
  • 在没有lava类的序列化之前,我们需要创建一个json对象,然后把user对象信息填写到json里面,然后再把这个json传给redis—这样每次传输数据的时候,都要将对象先转为json的格式数据,再传输,这样不仅麻烦而且是在user里面属性不复杂的情况下,所以产生了实体类直接序列化的功能
  • 在有了序列化之后,可以将user对象序列化为数据,直接发到redis上面,再反序列化,就可以得到user对象了,这样user类就可以传输了。
Redis数据序列化

项目中什么时候会使用到这个序列化??

这个问题很重要,你配置文件指定了固定的序列化方法,具体会在什么时候用呢?

就在最简单的opsForValue.set(“user”, user)操作里面!!!!!!

好好理解一下Java序列化,和redis实际项目中为什么直接put键值对的时候就用到了这个序列化方法!!!

那么什么时候会执行redis反序列化呢?

那不就是相应的取出redis.get(“user”)操作么,使用User类来接收这个redis存储的,当时User类转过去的序列化字符,就是反序列化过程!!!

下面介绍redis具体序列化的方法

https://blog.youkuaiyun.com/weixin_46008204/article/details/103507231!!!!

默认使用的是jdkSeriablizationRedisSerializer.

依赖dara-redis支持的几种序列化类,代表着不同的序列化方法,每种方法代表着具体进入redis里面保存的value的类型,是看不懂的二进制格式,还是最常用的json格式,还是String类型的格式

  • JdkSerializationRedisSerializer
    • 当redis.conf指定这种格式序列化的时候,使用redis可视化工具去redis里面查看数据的格式时,会发现保存的user对象变成了–看不懂的二进制格式—这里虽然我们不需要看懂,但是对于我们还是很不方便
  • Jackson2JsonRedisSerializer
    • redis里面保存的就是Json格式了,所以这个方法最推荐!
  • StringRedisSerializer
    • 看名字就知道redis里面保存的是String格式了,也不是很好
实际项目的redis.cong配置

https://blog.youkuaiyun.com/hotdust/article/details/52251148!!

先看上面文章,然后这个里面的配置其实没啥太大要求的,有想法的时候可以自己试试。

  @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {

        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);


        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(redisSerializer);
        redisTemplate.setHashKeySerializer(redisSerializer);

        // 设置value的序列化器
        //使用Jackson 2,将对象序列化为JSON
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //json转对象类,不设置默认的会将json转成hashmap--> 就是反序列化的时候,将json变为map
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

        // json中会显示类型
//        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        this.redisTemplate=redisTemplate;
        return redisTemplate;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值