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键的大小,;
请随时提供您的意见相同