StringRedisTemplate

StringRedisTemplate继承自RedisTemplate,在这里说明一下,当我们使用RedisTemplate往redis中存储java对象的时候,他会顺带着将该java对象的字节码文件也同时存进了内存中,这是为了实现自动反序列化
在这里插入图片描述
尽管JSON的序列化方式可以满足我们的需求,但是仍然存在一些问题,如上图所示,为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。

在使用RedisTemplate是一般我们都会使用自定义序列化方式来实现,比如下列配置:

@Configuration
public class RedisConfig {

@Bean
      public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
          RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
           // key 序列化方式
          redisTemplate.setKeySerializer(new StringRedisSerializer());
            // value 序列化
          redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
             // hash 类型 key序列化
          redisTemplate.setHashKeySerializer(new StringRedisSerializer());
             // hash 类型 value序列化方式
          redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
          // 注入连接工厂
           redisTemplate.setConnectionFactory(redisConnectionFactory);
              // 让设置生效
           redisTemplate.afterPropertiesSet();
           return redisTemplate;
      }

}

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

在这里插入图片描述
Spring默认提供了一个StringRedisTemplate类,它的key和Value的序列化方式默认就是String类型,省去了我们自定义RedisTemplate的过程

在这里插入图片描述

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

方案一:

    1. 自定义RedisTemplate
  • 2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer

方案二:

  • 1.使用StringRedisTemplate
  • 2.写入Redis时,手动把对象序列化为json格式字符串
  • 读取Redis时,手动把读取到的JSON反序列化成对象
  • 13
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值