我正在尝试分析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“部分?对于该密钥的复杂数据结构(例如散列/数组或列表)也是同样的问题。
试验和错误似乎没有给我一个明确的结果。
答案 0 :(得分:0)
不同的工具会给出不同的答案。
首先阅读--bigkeys
- 它会报告密钥空间中的大值大小,不包括密钥名称占用的空间。请注意,在这种情况下,值的大小意味着每种数据类型都有所不同,即字符串的大小由STRLEN
(字节)决定,而所有其他大小由其嵌套元素的大小决定。
所以这基本上意味着它几乎没有给出实际使用的指示,而是按照预期的方式 - 找到大键(不是大键名,只是估计的大值)。
INFO MEMORY
是另一回事。 used_memory
以字节为单位报告,反映了密钥名称的整个RAM消耗,它们的值以及内部数据结构的所有相关开销。
还有DEBUG OBJECT
但请注意,它的输出不是测量Redis中密钥内存消耗的可靠方法 - serializedlength
字段以字节为单位,用于保持对象,而不是内存中包含各种管理开销的实际占用空间。
最后,从v4开始,我们使用MEMORY USAGE
命令做得更好 - 有关详细信息,请参阅https://github.com/antirez/redis-doc/pull/851。