序列化:把对象转化为可传输的字节序列过程称为序列化。

反序列化:把字节序列还原为对象的过程称为反序列化。、

为什么需要序列化

序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。而我们进行跨平台存储网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。我们必须在把对象转成字节数组的时候就制定一种规则(序列化),那么我们从IO流里面读出数据的时候再以这种规则把对象还原回来(反序列化)。

什么情况下需要序列化

通过上面我想你已经知道了凡是需要进行“跨平台存储”和”网络传输”的数据,都需要进行序列化。

本质上存储网络传输 都需要经过 把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息。

序列化的方式

序列化只是一种拆装组装对象的规则,那么这种规则肯定也可能有多种多样,比如现在常见的序列化方式有:

JDK(不支持跨语言)、JSON、XML、Hessian、Kryo(不支持跨语言)、Thrift、Protofbuff、

1.pom.xml文件,application.proerties核心配置文件如上文所示

2.设置RedisTemplate序列化

controller类

 /**
     * 设置RedisTemplate序列化
     * 可以设置key的序列化,可以设置value的序列化
     * 可以同时设置key和value的序列化
     */
    @PostMapping("/redis/addstr")
    public String addString(String k,String v){
        //使用RedisTemplate
        //设置key使用String的序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置value的序列化
        redisTemplate.setValueSerializer(new StringRedisSerializer());

        redisTemplate.opsForValue().set(k,v);
        return "定义RedisTemplate对象的key,value的序列化";

    }

通过设置RedisTemplate序列化进行向redis数据库中添加数据

 进入redis客户端查看是否添加成功

3.使用json序列化

1)新建Studnet类

package com.it.entity;

import java.io.Serializable;

public class Student implements Serializable {
    private static final long serialVersionUID = -3250265661524035193L;
    private Integer id;
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

2)controller类

  /**
     * 使用json序列化,把java对象转为json存储
     */
    @PostMapping("/redis/addjson")
    public String addJson(){
        Student student=new Student();
        student.setId(1001);
        student.setName("张山");
        student.setAge(20);

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //把值作为json序列化
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
        redisTemplate.opsForValue().set("student1",student);

        return "json序列化";

    }

测试结果

4.使用json反序列化

 /**
     * 使用json反序列化,把java对象转为json存储
     */
    @PostMapping("/redis/getjson")
    public String getJson(){

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //把值作为json序列化
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
        Object student1 = redisTemplate.opsForValue().get("student1");

        return "json反序列化="+student1;

    }

测试结果

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐