Мой экземпляр redis, кажется, становится очень большим, и я хотел бы узнать, какая из нескольких баз данных, которые у меня есть, потребляет сколько памяти. INFO
Команда Redis просто показывает мне общий размер и количество ключей для каждой базы данных, что не дает мне особого представления ... Так что любые инструменты / идеи, которые дают мне больше информации при мониторинге сервера Redis, будут оценены.
Документация Redis не показывает мне никаких команд, которые могут вернуть потребленную память определенных ключей, поэтому я предполагаю, что если какой-либо ошибочный код будет записывать много "мусора" в redis, это будет действительно сложно найти ...
Решение из комментариев заслуживает собственного ответа:
источник
a
со значением 4 ГБ, но это не будет отображаться в bigkeys. (это делается gist.github.com/michael-grunder/9257326 и docs.redislabs.com/latest/ri/memory-optimizations/… )MEMORY USAGE key
Команда дает вам количество байтов, которое требуется для хранения ключа и его значения в ОЗУ.Сообщаемое использование - это общее выделение памяти для данных и административных накладных расходов, которые требуются для ключа, соответствующего его значению (исходная документация Redis)
источник
Взгляните на этот проект, он выводит интересную статистику о пространствах ключей на основе регулярных выражений и префиксов. Он использует
DEBUG OBJECT
команду и сканирует базу данных, идентифицируя группы ключей и оценивая процент пространства, которое они занимают.https://github.com/snmaynard/redis-audit
Результат выглядит так:
Или вот этот: https://github.com/sripathikrishnan/redis-rdb-tools, который выполняет полный анализ всего пространства ключей, анализируя файл dump.rdb в автономном режиме. Этот тоже хорошо работает. Он может дать вам средний / минимальный / максимальный размер для записей в вашей базе данных и даже сделает это на основе префикса.
источник
Возможно, вам будет очень полезно взять образцы ключей Redis и сгруппировать их по типу. Сальваторе написал инструмент под названием redis-sampler, который выдает около 10000
RANDOMKEY
команд, за которыми следуютTYPE
извлеченные ключи. За секунды или минуты вы должны получить довольно точное представление о распределении типов ключей.Я написал расширение (к сожалению, нигде с открытым исходным кодом, потому что оно связано с работой), которое добавляет немного самоанализа имен ключей с помощью регулярных выражений, которые дают вам представление о том, какие типы ключей приложения (в зависимости от структуры именования вы using), хранятся в Redis. В сочетании с более общим выводом redis-sampler это должно дать вам очень хорошее представление о том, что происходит.
источник
redis-cli --bigkeys
Возможно, вам удастся провести некоторый анализ файла db. Протокол относительно прост (но плохо документирован), поэтому вы можете написать для него парсер, чтобы определить, какие отдельные ключи занимают много места.
Новые предложения:
Вы пробовали использовать,
MONITOR
чтобы посмотреть, что пишется вживую? Возможно, вы найдете проблему с данными в движении.источник
INFO
иMONITOR
, возможно, главная проблема в том, что, когда я не смотрел, Redis действительно вырос ...Вы можете использовать приложение .net https://github.com/abhiyx/RedisSizeCalculator для расчета размера ключа redis,
Пожалуйста, не стесняйтесь оставлять свои отзывы о том же
источник
Я обычно предпочитаю ключевой метод выборки для устранения таких сценариев.
Например:-
источник
Как насчет redis-cli получить KEYNAME | туалет -c
источник