【发布时间】:2013-02-01 20:58:48
【问题描述】:
我在 Redis 中进行了一项实验,以测试大键的内存使用情况。我加载了 1600 万个字符串 50-60 个字符(字节),大致将磁盘上的 802 MB 放入 Redis 中的排序集中。它 此排序集已用完(膨胀到)3.12 GB 的 RAM。
然后我加载了 1600 万个 短字符串(10-12 个字符),占用了 220 MB 磁盘空间 进入另一个仍然用完 2.5 GB RAM 的排序集。很明显,减少 磁盘上的空间使用率相当高(减少了约 72%),但 Redis 排序集仍然使用 大字符串使用了大量的内存。
Redis 哈希也是如此(短字符串几乎占用了 80% 长字符串使用的内存)。 Redis 数据结构使用的内存是否只依赖于 数据结构中元素的数量(排序集或散列),而不是长度 每个元素(这是很自然的想法 - 较短的字符串=>较少的内存)?
如果我能理解为什么就太好了
1600 万个长字符串占用几乎与 1600 万个短字符串相同的空间
在排序集中,如果有什么我可以做的来减少短字符串占用的内存 (任何内存优化)?
【问题讨论】:
-
快速(无答案)分析;数据大小的差异约为 600MB,内存需求的差异约为 600m,因此对于您添加的字符串数量,似乎存在一个与字符串长度无关的常数因子,约为 2.3GB。
-
非字符串长度相关因素似乎不是恒定的,它确实取决于数据结构中元素的数量,这非常糟糕,因为它会随着数据结构变大而增长(更多元素数)!
标签: memcached redis in-memory-database in-memory