我在Redis中运行实验来测试大型密钥的内存使用情况。我加载了16 Million字符串 与50-60个字符(字节),大致将802 MB在磁盘上转换为Redis中的排序集。它 用完(臃肿到)3.12 GB的内存这个排序集。Redis Data Structures使用大量内存
然后我装16个百万短字符串(10-12个字符)占据220 MB的磁盘上的空间 到另一个有序集合仍然用完2.5 GB的RAM。很显然,磁盘空间使用量的减少量为 非常高(减少了72%),但Redis排序集仍然使用大型字符串使用的相当大量的内存。
Redis哈希也是这种情况(短字符串占用了长字符串使用的内存的80%)。 Redis数据结构使用的内存是否仅依赖于数据结构中的元素个数(排序集或散列),而不是每个元素的长度(这很自然地认为是这样 - 较短的字符串=>较小的内存)?
这将是巨大的,如果我能理解为什么
1600万的长字符串使用了几乎相同的空间,16万个短吨串
在有序集合,如果有什么我可以做的,以减少短字符串 (任何内存优化)占用的内存?
快速(无回答)分析;数据大小的差异大约是600MB,内存需求的差异大约是600m,因此您添加的字符串数量似乎存在大约2.3GB的非字符串长度相关常数因子。 – 2013-02-17 08:22:10
非字符串长度相关因子似乎并不恒定,它取决于数据结构中非常糟糕的元素数量,因为它在数据结构变大(元素数量增多)时增长! – 2013-02-17 09:01:52