我在Redis上使用哈希存储对象,我想从Redis的角度计算这些哈希的长度.
你可以轻松地使用字符串STRLEN.
但我根本无法在文档中找到适合哈希数据类型的命令.列表或集合似乎是一样的.
基本上,我找到的唯一解决方案是获取整个哈希HGETALL 并计算客户端大小的长度.
是开箱即用的东西吗?
如果我错了,请不要向我解释原因或给我相关链接/帖子/ SO问题.
编辑:
HLEN不是解决方案,因为它"返回哈希中包含的字段数".我想为Redis数据库上的容量规划和活动监控计算此大小.
Eli*_*Eli 23
只需使用HLEN.
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
Run Code Online (Sandbox Code Playgroud)
编辑:问题被澄清为OP希望哈希的磁盘大小进行主动监控.在这种情况下,我肯定会使用Lua脚本来计算服务器上哈希的大小并将值返回给您.如果您期望有大的哈希值,请不要使用HGETALL,因为您需要将整个哈希值从服务器传输到客户端计算机,这很快就会成为您的瓶颈.使用Lua在Redis服务器上进行此计算意味着您只需传输网络字节数的int,而不是整个哈希的mb数据.
小智 8
对于磁盘空间的长度,您可以使用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
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
取决于你想对散列的长度做什么。
如果您想要长度进行一些诊断或监控,例如查找消耗的内存,那么我建议您使用redis-rdb-tools 之类的工具离线进行(免责声明:我是该工具的作者)。csv 转储文件将为您提供有关每个键的统计信息 - 包括总大小、消耗的总内存等。
但是,如果您希望通过大小来实现某些应用程序功能,则没有现成的解决方案。HGETALL 加上客户端大小的长度计算是要走的路。您也许可以通过编写 lua 脚本进行优化,以便在 redis 服务器本身上进行长度计算。
| 归档时间: |
|
| 查看次数: |
12082 次 |
| 最近记录: |