Instagram的员工做得非常好,并详细说明了如何节省磁盘。但是,我想要一些详细的原因,为什么zipmap哈希桶可以节省内存?是因为你不需要分配很多long类型而只需要int类型吗?
谢谢你们。
答案 0 :(得分:1)
这里要理解的主要是指针占用了大量空间。如果您要序列化哈希并将其保存为带有无键值指针的字符串,则可以节省大量空间,因为您将从每对的指针转到0指针。
Redis是一个内存数据存储区,它希望尽可能地帮助您节省尽可能多的空间,只要它能够做到这一点而不会严重影响性能。为了实现这一点,它将保持简单序列化的小哈希值,并在执行哈希操作时完全搜索它们。实际上这是O(n),但由于散列很小,因此在节省大量内存的同时不会影响性能。一旦哈希值变大,Redis就会将它转换为实际的哈希值,它将开始占用更多的空间,但现在有了常规的哈希O(1)搜索,写入和删除时间。 Redis provides the "hash-max-zipmap-entries" setting among many similar settings to let you configure exactly where this conversion point is.因此,Instagram工程师们发现,他们可以将此转换点设置为高于默认值,以便以更高的CPU负载为代价来节省更多空间。对他们来说,这是一个很好的权衡。我强烈建议您阅读here以获取更多信息。