Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/redis-get-key-memory-size.html

redis 如何查看指定 key 的大小,即所占内存空间大小

Redis 笔记 Redis 笔记


我们在使用 Redis 时,往往想要查看单个指定 key 的内存所占大小,以此来进一步判断如何更合理地存储比较大的键。

解决方法

redis 在 4.0 版本开始,提供了允许查看特定 key 大小的命令 MEMORY USAGE 命令,具体示例如下:

redis_host:6379> set knowledge dict
OK
redis_host:6379> memory usage knowledge
(integer) 59

返回指定 key 的内存占用字节数。

如果要查看的 key 是内嵌类型(除 string 之外的集合类型),可以使用 SAMPLES 选项来可以指定采样的元素个数。

假设,键 knowledgedict 是哈希(hash)类型,它有 10000 个元素,那么预估该键的占用大小,可以通过 SAMPLES 选项来指定采样元素个数,进行抽样平均计算后预估总大小,示例如下:

redis_host:6379> MEMORY USAGE knowledgedict SAMPLES 100
(integer) 617977753
redis_host:6379> MEMORY USAGE knowledgedict SAMPLES 1000
(integer) 624950853

可以看出,抽样的个数不一样,会导致预估大小的变化,主要是因为抽样及平均算法导致。

抽样是使用 LRU 采样方式,默认抽样 5 个元素,计算抽样个数的平均占用大小,然后根据总元素个数算出总大小,所以计算是近似值。

这是使用抽样求平均的算法,要想获取 key 较精确的内存值,就指定更大 SAMPLES 个数。但并不是越大越好,因为越大,命令占用 cpu 时间分片就大。

此外,memory usage不包含 key 本身字符串的内存占用,也不包含 key expire 的内存占用。

查看 memory usage 更多信息参见 MEMORY USAGE 命令详解