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

时间:2011-10-03 17:31:56

标签: redis

我的redis实例似乎变得非常大,我想知道我在那里的多个数据库中消耗了多少内存。 Redis'INFO命令只显示了每个数据库的总大小和密钥数量,这并没有给我太多的了解......所以在监控redis服务器时给我更多信息的任何工具/想法都将受到赞赏

Redis文档没有向我显示任何可以返回某些键的消耗内存的命令,所以我想如果任何错误代码会给redis写下很多“垃圾”,这可能真的很难找到...

10 个答案:

答案 0 :(得分:95)

所以我对自己的问题的解决方案:在使用redis-cli一段时间之后,我发现DEBUG OBJECT <key>显示了类似serializedlength键的内容,这实际上是我的意思正在寻找......

对于整个数据库,您需要聚合KEYS *的所有值,使用您选择的脚本语言不应该太难...

糟糕的是redis.io并没有真正有关DEBUG OBJECT的大量信息。

答案 1 :(得分:47)

评论中的解决方案值得自己回答:

redis-cli --bigkeys

答案 2 :(得分:15)

看一下这个项目,它根据正则表达式和前缀输出一些关于键空间的有趣统计数据。它使用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文件对整个密钥空间进行全面分析。这个也适用。它可以为您提供数据库中条目的平均/最小/最大大小,甚至可以根据前缀进行。

答案 3 :(得分:13)

MEMORY USAGE key命令为您提供密钥及其值需要存储在RAM中的字节数。

报告的用法是数据和管理开销的内存分配总量,这是其值所需的关键 (来源redis文档)

答案 4 :(得分:7)

您可能会发现对Redis键进行采样并按类型对其进行分组非常有用。 Salvatore编写了一个名为redis-sampler的工具,该工具在检索到的密钥上发出大约10000 RANDOMKEY个命令后跟TYPE。只需几秒钟或几分钟,您就可以获得关键类型分布的相当准确的视图。

我已经编写了一个扩展(遗憾的是它不是任何开源的,因为它与工作有关),它通过正则表达式添加了一些关键名称的内省,让你了解什么类型的应用程序键(根据任何命名结构)你正在使用),存储在Redis中。结合redis-sampler的更一般输出,这可以让你非常了解正在发生的事情。

答案 5 :(得分:3)

也许你可以对db文件进行一些内省。该协议相对简单(但没有详细记录),因此您可以为其编写解析器,以确定哪些单独的密钥占用了大量空间。


新建议:

您是否尝试使用MONITOR查看正在撰写的内容,直播?也许你可以找到动态数据的问题。

答案 6 :(得分:2)

您可以使用.net应用https://github.com/abhiyx/RedisSizeCalculator 计算redis密钥的大小,

请随时提供相同的反馈

答案 7 :(得分:1)

我通常更喜欢使用密钥采样方法来解决此类情况。

redis-cli -p 6379 -n db_number --bigkeys

例如:-

redis-cli -p 6370 -n 0 --bigkeys

答案 8 :(得分:0)

redis-cli如何获得KEYNAME | wc -c

答案 9 :(得分:-1)

也可以查看redis中的INFO命令查看内存使用情况

$ redis-cli
127.0.0.1:6379> INFO memory