Redis 密钥大小是否还包括该密钥的数据大小或仅包括密钥本身?
Does redis key size also include the data size for that key or just the key itself?
我正在尝试分析 redis 数据库的数据库大小并根据几篇文章调整我们的数据存储,例如 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
我已阅读有关 "key sizes"(即 https://redis.io/commands/object)的文档
并尝试了 运行 各种工具,例如:
redis-cli --bigkeys
并且还尝试读取 redis-cli 的输出:
INFO memory
我不清楚尺寸语义。
报告的大小是否 仅 反映了密钥 本身 的大小,即如果我的密钥是“abc ”且值为“value1”报告的大小是针对 "abc" 部分?还有关于该键的复杂数据结构(例如哈希/数组或列表)的相同问题。
反复试验似乎没有给我一个明确的结果。
不同的工具给出不同的答案。
首先阅读 --bigkeys
- 它报告键 space 中的大值大小,不包括键名采用的 space。请注意,在这种情况下,值的大小对每种数据类型都有不同的含义,即字符串的大小由它们的 STRLEN
(字节)决定,而所有其他值的大小由其嵌套元素的数量决定。
所以这基本上意味着它几乎没有给出实际使用情况的指示,而是按照预期的方式进行 - 找到大键(不是大键名,只有估计的大值)。
INFO MEMORY
是另一回事。 used_memory
以字节为单位报告,反映了键名、它们的值以及内部数据结构的所有相关开销的整个 RAM 消耗。
还有 DEBUG OBJECT
但请注意,它的输出不是衡量 Redis 中键的内存消耗的可靠方法 - serializedlength
字段以持久化对象所需的字节为单位给出,不是内存中的实际占用空间,它包括数据本身之上的各种管理开销。
最后,从 v4 开始,我们有 MEMORY USAGE
命令做得更好 - 有关详细信息,请参阅 https://github.com/antirez/redis-doc/pull/851。
我正在尝试分析 redis 数据库的数据库大小并根据几篇文章调整我们的数据存储,例如 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
我已阅读有关 "key sizes"(即 https://redis.io/commands/object)的文档
并尝试了 运行 各种工具,例如:
redis-cli --bigkeys
并且还尝试读取 redis-cli 的输出:
INFO memory
我不清楚尺寸语义。
报告的大小是否 仅 反映了密钥 本身 的大小,即如果我的密钥是“abc ”且值为“value1”报告的大小是针对 "abc" 部分?还有关于该键的复杂数据结构(例如哈希/数组或列表)的相同问题。
反复试验似乎没有给我一个明确的结果。
不同的工具给出不同的答案。
首先阅读 --bigkeys
- 它报告键 space 中的大值大小,不包括键名采用的 space。请注意,在这种情况下,值的大小对每种数据类型都有不同的含义,即字符串的大小由它们的 STRLEN
(字节)决定,而所有其他值的大小由其嵌套元素的数量决定。
所以这基本上意味着它几乎没有给出实际使用情况的指示,而是按照预期的方式进行 - 找到大键(不是大键名,只有估计的大值)。
INFO MEMORY
是另一回事。 used_memory
以字节为单位报告,反映了键名、它们的值以及内部数据结构的所有相关开销的整个 RAM 消耗。
还有 DEBUG OBJECT
但请注意,它的输出不是衡量 Redis 中键的内存消耗的可靠方法 - serializedlength
字段以持久化对象所需的字节为单位给出,不是内存中的实际占用空间,它包括数据本身之上的各种管理开销。
最后,从 v4 开始,我们有 MEMORY USAGE
命令做得更好 - 有关详细信息,请参阅 https://github.com/antirez/redis-doc/pull/851。