我的redis实例似乎正在变得非常大,我想找出那里的多个数据库中的哪个消耗了多少内存。Redis的INFO
命令仅向我显示了每个数据库的总大小和密钥数,这并没有给我带来太多的了解...因此,在监视Redis服务器时向我提供更多信息的任何工具/想法都将受到赞赏。
Redis文档没有向我显示任何可以返回某些键消耗的内存的命令,因此我想如果有错误代码会为Redis写很多“废纸rash”,这可能很难找到...
Answers:
因此,我对自己的问题的解决方案是:在玩了redis-cli
一段时间之后,我发现它DEBUG OBJECT <key>
揭示了像serializedlength
key之类的东西,实际上这是我在寻找的东西...
对于整个数据库,您需要KEYS *
使用自己选择的脚本语言来汇总所有应该不太困难的值...
糟糕的是redis.io并没有太多的信息DEBUG OBJECT
。
评论中的解决方案应有自己的答案:
redis-cli --bigkeys
a
了4GB值,但这不会在bigkeys露面。(这由gist.github.com/michael-grunder/9257326和docs.redislabs.com/latest/ri/memory-optimizations/…进行)
看一下这个项目,它基于正则表达式和前缀输出一些有关键空间的有趣统计信息。它使用DEBUG OBJECT
命令并扫描数据库,确定键组并估计它们占用的空间百分比。
https://github.com/snmaynard/redis-audit
输出看起来像这样:
Summary
---------------------------------------------------+--------------+-------------------+---------------------------------------------------
Key | Memory Usage | Expiry Proportion | Last Access Time
---------------------------------------------------+--------------+-------------------+---------------------------------------------------
notification_3109439 | 88.14% | 0.0% | 2 minutes
user_profile_3897016 | 11.86% | 99.98% | 20 seconds
---------------------------------------------------+--------------+-------------------+---------------------------------------------------
或者这个:https: //github.com/sripathikrishnan/redis-rdb-tools,它通过脱机分析dump.rdb文件来对整个键空间进行全面分析。这个也很好用。它可以为您的数据库中的条目提供avg / min / max大小,甚至可以基于前缀来实现。
您可能会发现对Redis密钥进行采样并按类型对其进行分组非常有用。萨尔瓦托(Salvatore)编写了一个称为redis-sampler的工具,该工具发出大约10000条RANDOMKEY
命令,然后发出TYPE
检索键。在几秒钟或几分钟之内,您应该可以准确了解密钥类型的分布。
我写了一个扩展(不幸的是,它与工作相关,没有开源),它通过正则表达式增加了对键名的自省,使您可以了解哪种类型的应用程序键(根据您使用的命名结构而定)使用)存储在Redis中。结合redis-sampler的更一般的输出,这应该使您对正在发生的事情有一个非常好的了解。
redis-cli --bigkeys
也许您可以对db文件进行一些自省。该协议相对简单(但文档尚不完善),因此您可以为其编写一个解析器,以确定哪些单独的键占用了大量空间。
新建议:
您是否尝试过使用MONITOR
以查看正在写的内容?也许您可以找到有关移动数据的问题。
INFO
和MONITOR
,但可能主要的问题是,那个时候不看Redis的增长非常大的...
您可以使用.net应用程序https://github.com/abhiyx/RedisSizeCalculator 来计算redis密钥的大小,
请随时提供您的反馈意见