Redis:显示密钥的数据库大小/大小

我的Redis实例似乎正在增长非常大,我想找出我在那里的多个数据库中的哪一个消耗多less内存。 Redis的INFO命令只显示了每个数据库的总大小和密钥数量,这并没有给我太多的见解。所以,在监视Redis服务器时,给我提供更多信息的任何工具/想法都是值得赞赏的。

Redis文档没有显示任何可以返回某些密钥的消耗内存的命令,所以我猜如果有任何bug的代码会写很多“垃圾”到redis,这可能很难find…

所以我的解决scheme,我自己的问题:在与redis-cli玩了一段时间后,我发现DEBUG OBJECT <key>揭示了一些像键serializedlength长度,这实际上是我正在寻找…

对于整个数据库,您需要汇总KEYS *所有值,这对您select的脚本语言来说应该不会太难。

坏消息是, redis.io并没有真正的关于DEBUG OBJECT的大量信息。

看看这个项目,它会根据正则expression式和前缀输出关于密钥空间的一些有趣的统计信息。 它使用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文件对整个密钥空间进行全面的分析。 这个工作也很好。 它可以给你的数据库的条目平均/分钟/最大的大小,甚至会根据前缀做到这一点。

从评论的解决scheme值得它自己的答案:

 redis-cli --bigkeys 

您可能会发现,对Redis键进行采样并按types进行分组非常有用。 Salvatore已经编写了一个名为redis-sampler的工具,该工具发出大约10000个RANDOMKEY命令,然后在检索到的键上input一个TYPE 。 在几秒或几分钟的时间内,您应该可以获得关键types分布的相当准确的视图。

我已经写了一个扩展(不幸的是没有任何开源的,因为它是工作相关的),通过正则expression式增加了一些内省的键名,让你了解什么样的应用程序键(根据你的命名结构使用)存储在Redis中。 结合redis-sampler的更一般的输出,这应该给你一个非常好的想法。

也许你可以对db文件做一些反省。 该协议相对简单(但没有很好的文档),所以你可以写一个parsing器,以确定哪些个人密钥占用大量的空间。


新build议:

你有没有试过用MONITOR来看看现在正在写什么? 也许你可以find运动中的数据的问题。

您可以使用.net应用程序https://github.com/abhiyx/RedisSizeCalculator来计算redis键的大小,;

请随时提供您的意见相同