redis 的StringRedisTemplate

6.3 StringRedisTemplate

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

为了减少内存的消耗,我们可以采用手动序列化的方式,换句话说,就是不借助默认的序列化器,而是我们自己来控制序列化的动作,同时,我们只采用String的序列化器,这样,在存储value时,我们就不需要在内存中就不用多存储数据,从而节约我们的内存空间

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这种用法比较普遍,因此SpringDataRedis就提供了RedisTemplate的子类:StringRedisTemplate,它的key和value的序列化方式默认就是String方式。

省去了我们自定义RedisTemplate的序列化方式的步骤,而是直接使用:

@SpringBootTest
class RedisStringTests {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void testString() {
        // 写入一条String数据
        stringRedisTemplate.opsForValue().set("verify:phone:13600527634", "124143");
        // 获取string数据
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }

    private static final ObjectMapper mapper = new ObjectMapper();

    @Test
    void testSaveUser() throws JsonProcessingException {
        // 创建对象
        User user = new User("虎哥", 21);
        // 手动序列化
        String json = mapper.writeValueAsString(user);
        // 写入数据
        stringRedisTemplate.opsForValue().set("user:200", json);

        // 获取数据
        String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
        // 手动反序列化
        User user1 = mapper.readValue(jsonUser, User.class);
        System.out.println("user1 = " + user1);
    }

}

此时我们再来看一看存储的数据,小伙伴们就会发现那个class数据已经不在了,节约了我们的空间~

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后小总结:

RedisTemplate的两种序列化实践方案:

  • 方案一:

    • 自定义RedisTemplate
    • 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
  • 方案二:

    • 使用StringRedisTemplate
    • 写入Redis时,手动把对象序列化为JSON
    • 读取Redis时,手动把读取到的JSON反序列化为对象

相关推荐

  1. Redis当中用StringRedisTemplate封装好工具类

    2024-04-03 16:28:04       15 阅读
  2. RedisTemplate 与StringRedisTemplate区别

    2024-04-03 16:28:04       13 阅读
  3. StringRedisTemplate Autowired注入为空解决

    2024-04-03 16:28:04       19 阅读
  4. RedisRedis 数据类型

    2024-04-03 16:28:04       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 16:28:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 16:28:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 16:28:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 16:28:04       20 阅读

热门阅读

  1. springboot Guacamole

    2024-04-03 16:28:04       14 阅读
  2. 回溯算法C实现

    2024-04-03 16:28:04       16 阅读
  3. 关于自动化测试工具RobotFrameWork

    2024-04-03 16:28:04       14 阅读
  4. React 优先级队列小顶堆的简单实现

    2024-04-03 16:28:04       19 阅读
  5. Rust语言中Option和Result两种类型的使用

    2024-04-03 16:28:04       16 阅读
  6. js 模块化

    2024-04-03 16:28:04       18 阅读