Как устранить проблемы в Redis

Введение

Redis – это свободное программное обеспечение для хранения данных в формате ключ-значение в памяти. Он поставляется с несколькими командами, которые могут помочь в устранении неполадок и отладке проблем. Из-за того, что Redis работает как хранилище данных в памяти с использованием ключей и значений, многие из этих команд сосредоточены на управлении памятью, но есть и другие, которые ценны для предоставления обзора состояния вашего сервера Redis. В этом руководстве будут предоставлены подробности о том, как использовать некоторые из этих команд для диагностики и устранения проблем, с которыми вы можете столкнуться при использовании Redis.

Как использовать это руководство

Это руководство написано в виде шпаргалки с самостоятельными примерами. Мы рекомендуем вам переходить к любому разделу, который является актуальным для задачи, которую вы пытаетесь выполнить.

Команды, показанные в этом руководстве, были протестированы на сервере Ubuntu 22.04 с установленной версией Redis 6.0.16. Чтобы создать аналогичное окружение, вы можете следовать Шагу 1 нашего руководства по Установке и обеспечению безопасности Redis на Ubuntu 22.04. Мы продемонстрируем, как работают эти команды, запуская их с помощью redis-cli, интерфейса командной строки Redis. Если вы используете другой интерфейс Redis — например, Redli, — точный вывод некоторых команд может отличаться.

Или вы можете предоставить управляемый экземпляр базы данных Redis для тестирования этих команд, но в зависимости от уровня контроля, предоставленного вашим поставщиком баз данных, некоторые команды в этом руководстве могут не работать так, как описано. Для предоставления управляемой базы данных DigitalOcean следуйте нашей документации по продукту Управляемые базы данных. Затем вам необходимо установить Redli или настроить туннель TLS, чтобы подключиться к управляемой базе данных по протоколу TLS.

memory usage показывает, сколько памяти в настоящее время используется одним ключом. Он принимает имя ключа в качестве аргумента и выводит количество используемых байтов. Сначала установите примерную переменную:

  1. set key_meaningOfLife "Food"

Затем проверьте память с помощью memory usage:

  1. memory usage key_meaningOfLife
Output
(integer) 88

Для более общего понимания того, как ваш сервер Redis использует память, вы можете выполнить команду memory stats:

  1. memory stats

Эта команда выводит массив метрик, связанных с памятью, и их значения. Вот метрики, сообщаемые memory stats:

  • peak.allocated: Пиковое количество байт, потребляемых Redis
  • total.allocated: Общее количество байт, выделенных Redis
  • startup.allocated: Начальное количество байт, потребляемых Redis при запуске
  • replication.backlog: Размер журнала репликации в байтах
  • clients.slaves: Общий размер всех накладных расходов реплики, включая буферы вывода и запросов и контексты подключения
  • clients.normal: Общий размер всех накладных расходов клиента
  • aof.buffer: Общий размер текущих и буферов перезаписи файлов только для добавления
  • db.0: Накладные расходы основных и словарей истечения срока действия для каждой используемой базы данных на сервере, сообщаемые в байтах
  • overhead.total: Сумма всех накладных расходов, используемых для управления пространством ключей Redis
  • keys.count: Общее количество ключей, сохраненных во всех базах данных на сервере
  • keys.bytes-per-key: Соотношение чистого использования памяти сервера и keys.count
  • dataset.bytes: Размер набора данных в байтах
  • dataset.percentage: Процент использования памяти Redis, занимаемый dataset.bytes
  • peak.percentage: Процентное отношение peak.allocated к total.allocated
  • фрагментация: Отношение количества памяти, используемой в данный момент, к физической памяти, которую Redis фактически использует

memory malloc-stats предоставляет внутренний отчет о статистике от jemalloc, аллокаторе памяти, используемом Redis в системах Linux:

  1. memory malloc-stats

Если кажется, что у вас возникают проблемы, связанные с памятью, но анализ вывода предыдущих команд оказывается бесполезным, вы можете попробовать запустить memory doctor:

  1. memory doctor

Эта функция выведет все проблемы потребления памяти, которые она сможет найти, и предложит потенциальные решения.

Получение общей информации о вашем экземпляре Redis

A debugging command that isn’t directly related to memory management is monitor. This command allows you to review a constant stream of every command processed by the Redis server:

  1. monitor
Output
OK 1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared" 1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

Еще одна полезная команда для отладки – это info, которая возвращает несколько блоков информации и статистики о сервере:

  1. info
Output
# Server redis_version:6.0.16 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:a3fdef44459b3ad6 redis_mode:standalone os:Linux 5.15.0-41-generic x86_64 . . .

Эта команда возвращает много информации. Если вы хотите вернуть только один блок информации, вы можете указать его в качестве аргумента для info:

  1. info CPU
Output
# CPU used_cpu_sys:173.16 used_cpu_user:70.89 used_cpu_sys_children:0.01 used_cpu_user_children:0.04

Обратите внимание, что информация, возвращаемая командой info, будет зависеть от версии Redis, которую вы используете.

Использование команды keys

Команда keys полезна в случаях, когда вы забыли название ключа или, возможно, создали его, но случайно ошиблись в названии. keys ищет ключи, соответствующие шаблону:

  1. keys pattern

Поддерживаются следующие переменные в стиле глобуса:

  • ? – это маска, которая соответствует любому одиночному символу, поэтому s?mmy соответствует sammy, sommy и sqmmy
  • * – это маска, которая соответствует любому количеству символов, включая ноль символов, поэтому sa*y соответствует sammy, say, sammmmmmy и salmony
  • Вы можете указать два или более символов, которые могут входить в шаблон, заключив их в квадратные скобки, поэтому s[ai]mmy будет соответствовать sammy и simmy, но не summy
  • Чтобы установить маску, которая игнорирует один или несколько символов, заключите их в квадратные скобки и предшествуйте символу каретки (^), поэтому s[^oi]mmy будет соответствовать sammy и sxmmy, но не sommy или simmy
  • Чтобы установить маску, которая включает диапазон букв, разделите начало и конец диапазона дефисом и заключите его в квадратные скобки, поэтому s[a-o]mmy будет соответствовать sammy, skmmy и sommy, но не srmmy

Предупреждение: Документация Redis предупреждает, что keys почти никогда не следует использовать в производственной среде, так как это может серьезно негативно сказаться на производительности.

Заключение

Это руководство описывает ряд команд, которые полезны для устранения и решения проблем, с которыми можно столкнуться при работе с Redis. Если вам интересны другие связанные команды, аргументы или процедуры, о которых вы хотели бы узнать в этом руководстве, пожалуйста, задавайте вопросы или делайте предложения в комментариях.

Для получения дополнительной информации о командах Redis ознакомьтесь с нашей серией учебников на тему Как управлять базой данных Redis.

Source:
https://www.digitalocean.com/community/cheatsheets/how-to-troubleshoot-issues-in-redis