专业的JAVA编程教程与资源

网站首页 > java教程 正文

浅聊 RedisTemplate和StringRedisTemplate区别

temp10 2024-11-08 13:56:09 java教程 10 ℃ 0 评论

1、RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:

这种形式有两个缺点:(1)可读性差 (2)内存占用较大

浅聊 RedisTemplate和StringRedisTemplate区别

针对以上问题,我们可以自定义RedisTemplate的序列化方式,代码如下:

尽管JSON的序列化方式可以满足我们的需求,但依然存在一些问题,如图:

为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。


2、StringRedisTemplate

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。

Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程:

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private static final ObjectMapper mapper = new ObjectMapper();

    @Test
    void testString() throws Exception{
        Student student = new Student(1, "赵东", "南京");
        stringRedisTemplate.opsForValue().set("student", mapper.writeValueAsString(student));

        String jsonStu = stringRedisTemplate.opsForValue().get("student");


        Student student1 = mapper.readValue(jsonStu, Student.class);
        System.out.println(student1);
    }


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表