RedisTemplate的默认序列化方式及改进【二】

作者: zhl 分类: Redis 发布时间: 2024-01-24 14:10

尽管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);
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注