我的redis实例似乎变得非常大,我想知道我在那里的多个数据库中消耗了多少内存。 Redis'INFO
命令只显示了每个数据库的总大小和密钥数量,这并没有给我太多的了解......所以在监控redis服务器时给我更多信息的任何工具/想法都将受到赞赏
Redis文档没有向我显示任何可以返回某些键的消耗内存的命令,所以我想如果任何错误代码会给redis写下很多“垃圾”,这可能真的很难找到...
答案 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