RedisTemplate的序列和反序列化机制讲解
-
上集问题
-
同个key为啥获取不到值,核心就是序列化机制导致key不一样
-
-
什么是序列化
-
把对象转换为字节序列的过程称为对象的序列化。
-
把字节序列恢复为对象的过程称为对象的反序列化。
-
对象的序列化主要有两种用途
-
把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中
-
在网络上传送对象的字节序列。
-
-
-
Redis为什么要序列化
-
性能可以提高,不同的序列化方式性能不一样
-
可视化工具更好查看
-
采用默认的jdk方式会乱码(POJO类需要实现Serializable接口)
-
采用JSON方式则不用,且可视化工具更好查看
-
-
-
自定义redis序列化方式,提供了多种可选择策略
-
JdkSerializationRedisSerializer
-
POJO对象的存取场景,使用JDK本身序列化机制
-
默认机制 ObjectInputStream/ObjectOutputStream进行序列化操作
-
-
StringRedisSerializer
-
Key或者value为字符串
-
-
Jackson2JsonRedisSerializer
-
利用jackson-json工具,将pojo实例序列化成json格式存储
-
-
GenericFastJsonRedisSerializer
-
另一种javabean与json之间的转换,同时也需要指定Class类型
-
-
代码测试 ,如果一个类不实现Serializable则无法存进redis中,实现后才能存进去,去RDM看是乱码
#测试
public class User implements Serializable {
private Integer id;
private String name;
}
@SpringBootTest
class SpringbootRedisApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void contextLoads() {
}
@Test
public void testSet(){
// redisTemplate.opsForValue().set("name1","aaaaaaaaaaa");
User user=new User();
user.setId(1);
user.setName("admin");
redisTemplate.opsForValue().set("user:1",user);
}