RedisTemplate的默认序列化方式及改进【二】
尽管JSON的序列化方式可以满足我们的要求,但依然存在一些问题,如图:
为了在反序列化时知道对象的类型,JSON序列化器会将类的 class类型写入 json 结果中,存入 Redis,会带来额外的内存开销。
为了节省内存空间,我们并不会使用 JSON 序列化器来处理 value,而是统一使用 String序列化器,要求只能存储 String 类型的 key 和 value,当需要存储 java 对象时,手动完成对象的序列化和反序列化。
Spring 默认提供了一个 StringRedisTemplate 类,它的 key 和 value 的序列化方式默认就是 String 方式。省去了自定义 RedisTemplate 的过程。
但是想要写入和读出对象,需要将其转为 JSON 格式,即手动序列化和反序列化。
可以选择自己习惯的方式进行序列化,如 fastJSON, Jackson 等。见 RedisTemplate 的序列化方式及改进【一】
@Test
public void testSaveUser() throws JsonProcessingException {
//创建User对象
User user = new User("雪豹", 12);
//手动序列化
String value = mapper.writeValueAsString(user);
//写入数据
redisTemplate.opsForValue().set("user:200",value);
//获取数据
String jsonUser = redisTemplate.opsForValue().get("user:200");
//手动反序列化
User user1 = mapper.readValue(jsonUser, User.class);
System.out.println("user1 = " + user1);
}