我在Redis中运行了一个实验来测试大型键的内存使用情况。我将1600万个字符串加载到Redis的排序集中,每个字符串有50-60个字符(字节),在磁盘上占用802 MB的空间。对于这个排序集,它占用了(膨胀到)3.12 GB的RAM。
然后我将1600万个短字符串(10-12个字符)加载到另一个排序集中,这些字符串在磁盘上占用220 MB的空间,但Redis仍然使用2.5 GB的RAM。很明显,磁盘空间使用量降低得相当高(约降低72%),但Redis排序集仍然使用相当大量的内存用于长字符串。
Redis散列也是如此(短字符串使用长字符串所使用内存的80%)。Redis数据结构使用的内存只取决于数据结构(排序集或散列)中的元素数量是否只与每个元素的长度无关(思考自然会认为较短的字符串 => 占用更少的内存)?
如果我能够理解为什么:
1600万个长字符串几乎使用了与1600万个短字符串几乎相同的空间
在排序集中,并且是否有任何方法可以减少短字符串占用的内存(任何内存优化)?