redis密钥大小是否还包括该密钥的数据大小或仅包含密钥本身?

时间:2017-11-07 13:19:02

标签: redis redis-cluster redis-cli

我正在尝试分析redis db的db大小,并根据https://davidcel.is/posts/the-story-of-my-redis-database/等几篇文章调整数据的存储空间 和https://engineering.instagram.com/storing-hundreds-of-millions-of-simple-key-value-pairs-in-redis-1091ae80f74c

我已阅读有关“密钥大小”的文档(即https://redis.io/commands/object

并尝试运行各种工具,如:

redis-cli --bigkeys

并尝试读取redis-cli的输出:

INFO memory

我不清楚大小语义。

报告的尺寸是否反映本身的大小,即如果我的密钥为“ abc ”且值为“ value1 “报告的大小是”abc“部分?对于该密钥的复杂数据结构(例如散列/数组或列表)也是同样的问题。

试验和错误似乎没有给我一个明确的结果。

1 个答案:

答案 0 :(得分:0)

不同的工具会给出不同的答案。

首先阅读--bigkeys - 它会报告密钥空间中的大值大小,不包括密钥名称占用的空间。请注意,在这种情况下,值的大小意味着每种数据类型都有所不同,即字符串的大小由STRLEN(字节)决定,而所有其他大小由其嵌套元素的大小决定。

所以这基本上意味着它几乎没有给出实际使用的指示,而是按照预期的方式 - 找到大键(不是大键名,只是估计的大值)。

INFO MEMORY是另一回事。 used_memory以字节为单位报告,反映了密钥名称的整个RAM消耗,它们的值以及内部数据结构的所有相关开销。

还有DEBUG OBJECT但请注意,它的输出不是测量Redis中密钥内存消耗的可靠方法 - serializedlength字段以字节为单位,用于保持对象,而不是内存中包含各种管理开销的实际占用空间。

最后,从v4开始,我们使用MEMORY USAGE命令做得更好 - 有关详细信息,请参阅https://github.com/antirez/redis-doc/pull/851