采用protobuf降低redis的内存使用

     Redis的当前数据存储在内存中,由于内存并不象硬盘一样有着很大的空间,对于服务器来说一般只会提供16G或32G内存。所以让Redis使用这些内存存储更多的数据是比较重要的。在使用redis的samples中一般都是使用string,而对象则用json方式来存储。但显然json所占用的空间是比较大的,在实际业务中一般对象成员都定义得比较长,而这些往往占用着很多空间;还有就是json对于数字的存储也是以字符方式表过,无法象二进制存储那样节省空间。

    其实在对象写入redis的时候可以采用一些更节省空间对象序列化方式,这里推荐的是protobuf.主要这种序列化方式是以K-V的方式来序列化属性成员,可以节省大量属性名在josn下的开销。protobuf还使用了7bit方式来存储数值,在数据值存储上比起json有着更大的势优。

到底protobuf在一般情况下会比json节省多少空间呢,以一个Order对象为例:

[ProtoContract]
    public class Order
    {
        [ProtoMember(1)]
        public int OrderID { get; set; }
        [ProtoMember(2)]
        public string CustomerID { get; set; }
        [ProtoMember(3)]
        public int EmployeeID { get; set; }
        [ProtoMember(4)]
        public DateTime OrderDate { get; set; }
        [ProtoMember(5)]
        public DateTime RequiredDate { get; set; }
        [ProtoMember(6)]
        public DateTime ShippedDate { get; set; }
        [ProtoMember(7)]
        public int ShipVia { get; set; }
        [ProtoMember(8)]
        public double Freight { get;set;}
        [ProtoMember(9)]
        public string ShipName { get; set; }
        [ProtoMember(10)]
        public string ShipAddress { get; set; }
        [ProtoMember(11)]
        public string ShipCity { get; set; }
        [ProtoMember(12)]
        public string ShipPostalCode { get; set; }
        [ProtoMember(13)]
        public string ShipCountry { get; set; }
    }

830条记录
   Json序列化的长度:270693
   protobuf序列化长度:88867

     可以看到protobuf节省的空间还是非常可观的,除了考虑节省空间还当然也需要考虑其通用性,在这方面protobuf也不会差于json,毕竟protobuf是google提出的产物大部分语言平台下都有其实现。

转载于:https://my.oschina.net/ikende/blog/155253

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值