Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Redis中查找最大对象的最简单方法是什么?_Redis - Fatal编程技术网

在Redis中查找最大对象的最简单方法是什么?

在Redis中查找最大对象的最简单方法是什么?,redis,Redis,我在生产中有一个20GB以上的rdb转储。 我怀疑有一套特殊的钥匙使它膨胀。 我希望有一种方法可以从静态转储分析中找出前100个最大的对象,或者让它发送给服务器本身,顺便说一下,服务器本身有700万个对象 像rdbtools这样的转储分析工具在这个(我认为)非常常见的用例中没有帮助 我想写一个脚本并用“redis cli debug object”迭代整个密钥集,但我觉得一定缺少了一些工具。我对bash脚本非常陌生。我说的是: for line in $(redis-cli keys '*' |

我在生产中有一个20GB以上的rdb转储。 我怀疑有一套特殊的钥匙使它膨胀。 我希望有一种方法可以从静态转储分析中找出前100个最大的对象,或者让它发送给服务器本身,顺便说一下,服务器本身有700万个对象

像rdbtools这样的转储分析工具在这个(我认为)非常常见的用例中没有帮助


我想写一个脚本并用“redis cli debug object”迭代整个密钥集,但我觉得一定缺少了一些工具。

我对bash脚本非常陌生。我说的是:

for line in $(redis-cli keys '*' | awk '{print $1}'); do echo `redis-cli DEBUG OBJECT $line | awk '{print $5}' | sed 's/serializedlength://g'` $line; done; | sort -h
这个剧本

  • 列出具有
    redis cli键“*”的所有键
  • 使用redis cli调试对象获取大小
  • 根据名称前缀和大小对脚本进行排序
这可能非常缓慢,因为bash正在循环遍历每个redis密钥。您有700万个密钥,您可能需要将密钥的输出缓存到一个文件。

确实有一个内存报告,可以完全满足您的需要。它生成一个CSV文件,每个密钥使用内存。然后,您可以对其进行排序并找到顶部的x键

还有一个实验性的内存分析器,它开始做你需要的事情。它还没有完成,因此没有文档记录。但是你可以试试。当然,我也鼓励你做出贡献


免责声明:我是此工具的作者。

在redis cli中添加了一个选项:
redis cli--bigkeys

基于

Try-一个控制台工具,实时扫描Redis密钥空间,并按密钥模式聚合内存使用统计信息。您可以在不维护生产服务器的情况下使用此工具。它显示了有关Redis服务中每个键模式的详细统计信息

您还可以按所有或选定的Redis类型(如“字符串”、“哈希”、“列表”、“集”、“zset”)扫描Redis db。还支持匹配模式


RMA还尝试通过模式识别密钥名称,例如,如果您有像“user:100”和“user:101”这样的密钥,则应用程序将在输出中选择常见模式“user:*”,以便您可以分析实例中大多数内存问题数据。

如果您有遵循此模式的密钥,“A:B”或“A:B:*”,我写了一个工具,它可以分析现有的内容以及监视器,比如命中率、获取/设置的数量、网络流量、生存期等。输出与下面的类似


serializedlength实际上是内存不足的指示器。对于使用Redis特殊编码的小对象,它是准确的。但对于较大的物体,这完全是不正确的。较大的对象由于指针而产生开销,并且它们可能在序列化版本中被压缩-这两种情况都不在序列化长度中考虑。谢谢@peterpan,然而,考虑到密钥的数量以及直接与生产服务器进行大规模交互的需要,bash循环排序从来都不是一个选项。请投票支持离线解决问题的方法。CSV文件非常大,需要解析/排序。@sscarduzio-我创建了一个问题来跟踪这个问题。当我有机会的时候,我会更新解析器来维护和显示内存使用量最高的N个键。拥有这个功能将非常有用。谢谢我最近添加了一个参数,以按键大小进行过滤,并且只返回N个最大的键,这两个参数都在我的项目分支中--干杯!两年后终于找到了真正的解决办法。谢谢。这是一个从2.8开始的“新”特性(后端口为2.6)。。。所以它已经存在了大约18个月了。。。嗨,伊塔玛:我想当我把所有的东西都搬到ARDB的时候,我就不再寻找解决这个问题的方法了。但是很高兴知道!有没有类似的东西可以在整个Redis集群的密钥上运行?我认为在集群中利用此功能的唯一方法是编写脚本,使其在每个主节点上运行,然后进行聚合。如果有更好的方法,那就太棒了。它似乎只适用于
python>=3.4
。对Python2.7有什么建议吗?@misterion:我用python3.6安装了RMA-m pip安装RMA,它安装成功了。当我键入python3.6-mrma时,它会显示/usr/local/bin/python3.6:没有名为rma的模块“rma”是一个包,不能直接执行
$ ./redis-cli --bigkeys

# Press ctrl+c when you have had enough of it... :)
# You can use -i 0.1 to sleep 0.1 sec every 100 sampled keys
# in order to reduce server load (usually not needed).

Biggest string so far: day:uv:483:1201737600, size: 2
Biggest string so far: day:pv:2013:1315267200, size: 3
Biggest string so far: day:pv:3:1290297600, size: 5
Biggest zset so far: day:topref:2734:1289433600, size: 3
Biggest zset so far: day:topkw:2236:1318723200, size: 7
Biggest zset so far: day:topref:651:1320364800, size: 20
Biggest string so far: uid:3467:auth, size: 32
Biggest set so far: uid:3029:allowed, size: 1
Biggest list so far: last:175, size: 51


-------- summary -------

Sampled 329 keys in the keyspace!
Total key length in bytes is 15172 (avg len 46.12)

Biggest   list found 'day:uv:483:1201737600' has 5235597 items
Biggest    set found 'day:uvx:555:1201737600' has 47 members
Biggest   hash found 'day:uvy:131:1201737600' has 2888 fields
Biggest   zset found 'day:uvz:777:1201737600' has 1000 members

0 strings with 0 bytes (00.00% of keys, avg size 0.00)
19 lists with 5236744 items (05.78% of keys, avg size 275618.11)
50 sets with 112 members (15.20% of keys, avg size 2.24)
250 hashs with 6915 fields (75.99% of keys, avg size 27.66)
10 zsets with 1294 members (03.04% of keys, avg size 129.40)
$ ./redis-toolkit report -type memory -name NAME
+----------------------------------------+----------+-----------+----------+
|                     KEY                | NR  KEYS | SIZE (MB) | SIZE (%) |
+----------------------------------------+----------+-----------+----------+
| posts:*                                |      500 |      0.56 |     2.79 |
| post_meta:*                            |      440 |     18.48 |    92.78 |
| terms:*                                |      192 |      0.12 |     0.63 |
| options:*                              |      109 |      0.52 |     2.59 |