spring-data-redis使用自定义序列化数据 使用 protobuf

本文介绍了Spring-Data-Redis中内置的序列化策略,包括JdkSerializationRedisSerializer、StringRedisSerializer、JacksonJsonRedisSerializer和OxmSerializer,并推荐在key和hashKey上使用StringRedisSerializer。针对JdkSerializationRedisSerializer占用空间大的问题,文章提出了使用google protobuf进行自定义序列化的优化方案,实现了存储数据量减少一半以上的效果。
摘要由CSDN通过智能技术生成
一、 spring-data-redis序列化策略

spring-data-redis提供了多种serializer策略,这对使用jedis的开发者而言,实在是非常便捷。sdr提供了4种内置的serializer:

  • JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储,jdk序列化和反序列化数据
  • StringRedisSerializer:字符串编码,数据以string存储
  • JacksonJsonRedisSerializer:json格式存储
  • OxmSerializer:xml格式存储

其中JdkSerializationRedisSerializer和StringRedisSerializer是最基础的序列化策略,其中“JacksonJsonRedisSerializer”与“OxmSerializer”都是基于stirng存储,因此它们是较为“高级”的序列化(最终还是使用string解析以及构建java对象)。

RedisTemplate中需要声明4种serializer,默认为“JdkSerializationRedisSerializer”:

1) keySerializer :对于普通K-V操作时,key采取的序列化策略
2) valueSerializer:value采取的序列化策略
3) hashKeySerializer: 在hash数据结构中,hash-key的序列化策略
4) hashValueSerializer:hash-value的序列化策略

无论如何,建议key/hashKey采用StringRedisSerializer。 这redis服务端用命令行好查看 配置如下:

< ! --   redis  template definition -- >
      < bean   id = "redisTemplate"   
          class = "org.springframework.data.redis.core.RedisTemplate"   
         p : connection - factory - ref = "jedisConnFactory"     scope = "prototype" >
          < ! -- 使用string主要是key 在 redis 端用命令好读 不然默认的序列化没办法读 -- >
          < property   name = "keySerializer" >
              < bean    class = "org.springframework.data.redis.serializer.StringRedisSerializer"     / >
          < / property >
          < property   name = "hashKeySerializer" >
              < bean    class = "org.springframework.data.redis.serializer.StringRedisSerializer"     / >
          < / property >

      < / bean >   

二、 自定义序列化处理效果

默认是JdkSerializationRedisSerializer存储,占用空间比较大,如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值