Redis的当前数据存储在内存中,因为内存并不象硬盘同样有着很大的空间,对于服务器来讲通常只会提供16G或32G内存。因此让Redis使用这些内存存储更多的数据是比较重要的。在使用redis的samples中通常都是使用string,而对象则用json方式来存储。但显然json所占用的空间是比较大的,在实际业务中通常对象成员都定义得比较长,而这些每每占用着不少空间;还有就是json对于数字的存储也是以字符方式表过,没法象二进制存储那样节省空间。 redis
其实在对象写入redis的时候能够采用一些更节省空间对象序列化方式,这里推荐的是protobuf.主要这种序列化方式是以K-V的方式来序列化属性成员,能够节省大量属性名在josn下的开销。protobuf还使用了7bit方式来存储数值,在数据值存储上比起json有着更大的势优。 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 ui
能够看到protobuf节省的空间仍是很是可观的,除了考虑节省空间还固然也须要考虑其通用性,在这方面protobuf也不会差于json,毕竟protobuf是google提出的产物大部分语言平台下都有其实现。 google