在Redis中找到最大对象的最简单方法是什么?

ssc*_*zio 38 redis

我有一个20GB + rdb转储生产.我怀疑有一组特定的钥匙膨胀它.我想有办法总是发现静态转储分析中的前100个最大的对象,或者问它到服务器本身,顺便说一下,它有7M对象.

像rdbtools这样的转储分析工具对此(我认为)真正常见的用例没有帮助!

我正在考虑编写一个脚本并使用"redis-cli调试对象"迭代整个键集,但我觉得必须有一些我缺少的工具.

Fra*_*mer 76

redis-cli中添加了一个选项: redis-cli --bigkeys

示例输出基于https://gist.github.com/michael-grunder/9257326

$ ./redis-cli --bigkeys

# Press ctrl+c when you have had enough of it... :)
# You can use -i 0.1 to sleep 0.1 sec every 100 sampled keys
# in order to reduce server load (usually not needed).

Biggest string so far: day:uv:483:1201737600, size: 2
Biggest string so far: day:pv:2013:1315267200, size: 3
Biggest string so far: day:pv:3:1290297600, size: 5
Biggest zset so far: day:topref:2734:1289433600, size: 3
Biggest zset so far: day:topkw:2236:1318723200, size: 7
Biggest zset so far: day:topref:651:1320364800, size: 20
Biggest string so far: uid:3467:auth, size: 32
Biggest set so far: uid:3029:allowed, size: 1
Biggest list so far: last:175, size: 51


-------- summary -------

Sampled 329 keys in the keyspace!
Total key length in bytes is 15172 (avg len 46.12)

Biggest   list found 'day:uv:483:1201737600' has 5235597 items
Biggest    set found 'day:uvx:555:1201737600' has 47 members
Biggest   hash found 'day:uvy:131:1201737600' has 2888 fields
Biggest   zset found 'day:uvz:777:1201737600' has 1000 members

0 strings with 0 bytes (00.00% of keys, avg size 0.00)
19 lists with 5236744 items (05.78% of keys, avg size 275618.11)
50 sets with 112 members (15.20% of keys, avg size 2.24)
250 hashs with 6915 fields (75.99% of keys, avg size 27.66)
10 zsets with 1294 members (03.04% of keys, avg size 129.40)
Run Code Online (Sandbox Code Playgroud)

  • 两年后终于找到了真正的解决方案。谢谢。 (2认同)
  • 这是一个从 2.8 开始的“新”功能(然后向后移植到 2.6)......所以它已经存在了大约 18 个月左右......只是说'(嘿西蒙娜!;)) (2认同)

Sri*_*nan 6

redis-rdb-tools确实有一个内存报告,可以完全满足您的需要。它生成一个 CSV 文件,其中包含每个键使用的内存。然后您可以对其进行排序并找到前 x 个键。

还有一个实验性内存分析器可以开始执行您需要的操作。它尚未完成,因此没有记录。但你可以尝试一下 - https://github.com/sripathikrishnan/redis-rdb-tools/tree/master/rdbtools/cli。当然,我也鼓励您做出贡献!

免责声明:我是该工具的作者。

  • @sscarduzio - 我创建了问题 https://github.com/sripathikrishnan/redis-rdb-tools/issues/19 来跟踪这个问题。当我有机会时,我将更新解析器以维护并显示内存使用情况的前 N ​​个键。 (2认同)