为什么Redis哈希桶节省磁盘



我读了这个博客:http://instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value-pairs

Instagram的家伙做了一个非常伟大的工作,详细说明如何节省磁盘。然而,我想要一些详细的原因,为什么zipmap哈希桶可以节省内存?是因为你不需要分配很多long类型而只需要int类型吗?

谢谢大家。

这里要理解的主要事情是指针占用大量空间。如果要序列化一个散列并将其保存为具有而没有键值指针的字符串,则可以节省大量空间,因为您将从每对指针的一个指针变为0个指针。

Redis是一个内存数据存储,它希望在不严重影响性能的情况下帮助你节省尽可能多的空间。为了实现这一点,它将保持小哈希的简单序列化,并在执行哈希操作时完全搜索它们。实际上,这是O(n),但由于哈希值很小,因此在节省大量内存的同时不会影响性能。一旦哈希变大,Redis会将其转换为实际哈希,它将开始占用更多的空间,但现在有常规哈希O(1)查找,写入,删除时间。Redis在许多类似的设置中提供了"hash-max-zipmap-entries"设置,让你可以准确地配置这个转换点的位置。所以,Instagram的工程师们想出的办法是,他们可以把这个转换点设置得比默认值更高,以更高的CPU负载为代价来节省更多的空间。对他们来说,这是一个很好的交易。我强烈推荐你阅读这里获取更多信息。

最新更新