序列化:把对象转化为可传输的字节序列过程称为序列化。
反序列化:把字节序列还原为对象的过程称为反序列化。、
为什么需要序列化
序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。而我们进行跨平台存储和网络传输的方式就是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;
}
测试结果