我正在考虑实现Redis在ASP.Net Web应用程序中缓存数据。
我想知道的是,在存储Redis之前,是否值得通过Protobuf-net序列化某些类型(字符串,bool,int和其他基元),还是会被序列化?
我主要对存储/检索的速度感兴趣,所以我意识到使用某些字符串,protobuf会通过减少网络流量来发挥作用,尽管序列化开销很小。
(是的,我知道字符串不是原始的)
如果有帮助,我正在使用StackExchange.Redis。
答案 0 :(得分:2)
Redis将所有值存储为二进制字符串,尽管IIRC有一些特殊的外壳用于"字符串"那个,就像ASCII一样,看起来就像整数一样。对于单个原始值,存储空间方面不会有任何显着差异,因此如果方便,我将避免添加额外的protobuf-net层。这也可能允许SE.Redis在许多情况下特殊地使用该值 - 并且它避免了对MemoryStream
或byte[]
之类的一些额外分配。它无论如何都不会很大,但既然它们不会为你买任何东西:为什么要使用它们?
当T
是结构化对象数据时,问题变得更加有趣。