Redis: показать размер и размер базы данных для ключей

Мой экземпляр redis, кажется, растет очень большой, и я хотел бы узнать, какая из нескольких баз данных, которые у меня есть, потребляет сколько памяти. Команда Redis INFO просто показывает мне общий размер и количество ключей в базе данных, что не дает мне много понимания... Поэтому любые инструменты/идеи, которые дают мне больше информации при мониторинге сервера redis, будут оценены.

Документация Redis не показывает мне никаких команд, которые могут вернуть потребляемую память определенных ключей, поэтому я предполагаю, что если какой-нибудь багги-код будет писать много "мусора" для повтора, это может быть очень сложно найти...

Ответ 1

Итак, мое решение моей собственной проблемы: после того, как я немного поработал с redis-cli, я обнаружил, что DEBUG OBJECT <key> показывает что-то вроде клавиши serializedlength, которая была на самом деле то, что я искал...

Для всей базы данных вам необходимо агрегировать все значения для KEYS *, которые не должны быть слишком сложными с использованием языка сценариев по вашему выбору...

Плохо, что redis.io на самом деле не очень много информации о DEBUG OBJECT.

Ответ 2

Взгляните на этот проект, он выводит некоторые интересные статистические данные о ключах на основе регулярных выражений и префиксов. Он использует команду DEBUG OBJECT и сканирует db, идентифицируя группы ключей и оценивая процент занимаемого места.

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 в автономном режиме. Это хорошо работает. Он может дать вам средний/максимальный размер для записей в вашем db и даже сделает это на основе префикса.

Ответ 3

Решение из комментариев заслуживает собственного ответа:

redis-cli --bigkeys

Ответ 4

Возможно, вам будет очень полезно пробовать клавиши Redis и группировать их по типу. Сальваторе написал инструмент под названием redis-sampler, который выдает около 10000 RANDOMKEY команд, за которыми следует TYPE на извлеченных ключах. В считанные секунды или минуты вы должны получить достаточно точное представление о распределении типов ключей.

Я написал расширение (к сожалению, нигде не открыто с открытым исходным кодом, потому что оно связано с работой), что добавляет немного интроспекции имен ключей с помощью регулярных выражений, которые дают вам представление о том, какие типы клавиш приложения (в соответствии с любой структурой именования вы используете), хранятся в Redis. В сочетании с более общим выходом redis-sampler это должно дать вам очень хорошее представление о том, что происходит.

Ответ 5

Возможно, вы можете сделать некоторые интроспекции в файле db. Протокол относительно прост (еще не задокументирован), поэтому вы можете написать синтаксический анализатор для определения того, какие отдельные клавиши занимают много места.


Новые предложения:

Пробовали ли вы использовать MONITOR, чтобы увидеть, что написано, жить? Возможно, вы можете найти проблему с данными в движении.

Ответ 6

Вы можете использовать .net-приложение https://github.com/abhiyx/RedisSizeCalculator для вычисления размера клавиши redis,

Пожалуйста, не стесняйтесь обращаться к нам за тем же