只需使用HLEN命令即可。
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
编辑: 问题已经澄清为OP想要主动监视哈希的磁盘大小。在这种情况下,我肯定会使用Lua脚本来计算服务器上哈希的大小,并将值返回给您。不要使用HGETALL如果您期望有大型哈希,因为您需要将整个哈希从服务器传输到客户端计算机,这将很快成为瓶颈。仅在Redis服务器上使用Lua进行此计算意味着您只需传输网络字节数的int,而不是可能是整个哈希的MB数据。
HLEN
确实会给出哈希表的长度(哈希表中键的数量)。对我来说,这仍然听起来像是你所要求的内容。如果你真正想要的是哈希表在磁盘上的大小,我已经在上面编辑了我的答案。 - Eli如果您想了解键的长度作为磁盘空间,可以使用DEBUG OBJECT,因为它会返回每个键的多个信息项。
redis 127.0.0.1:50001> hset myhash field1 'hello'
(integer) 1
redis 127.0.0.1:50001> hset myhash field2 'world'
(integer) 1
redis 127.0.0.1:50001> DEBUG OBJECT myhash
Value at:0x7fb8de4ad590 refcount:1 encoding:zipmap serializedlength:31 lru:696871 lru_seconds_idle:0
希望它有所帮助
根据哈希值长度的用途不同,操作也会有所不同。
如果您想要通过长度进行一些诊断或监控,比如查找内存消耗,我建议您使用离线工具(例如redis-rdb-tools,免责声明:我是这个工具的作者)。CSV转储文件将为您提供有关每个键的统计信息--包括总大小、总内存消耗等。
但是,如果您想使用大小来实现某些应用程序功能,则没有现成的解决方案。HGETALL加上客户端长度计算是可行的方法。您可以编写一个Lua脚本,以便在Redis服务器本身上进行长度计算,可能能够实现优化。
127.0.0.1:6379> hmset user:1000 username antirez birthyear 1977 verified 1
OK
127.0.0.1:6379> memory usage user:1000
(integer) 110
由于您正在用于容量规划,此命令的优点在于包括 Redis 在数据本身大小之上添加的任何管理开销。
127.0.0.1:6379> SET "" ""
OK
127.0.0.1:6379> MEMORY USAGE ""
(integer) 46