Сухой товар! Интервью Redis должен знать должен знать

Redis

Какие типы данных поддерживает Redis?

  • string: Самый простой тип данных, двоично-безопасная строка, максимум 512 МБ.
  • list: список строк в том порядке, в котором они были добавлены
  • set: неупорядоченный набор строк без повторяющихся элементов.
  • sorted set: отсортированный набор строк
  • hash: набор пар ключ/значение

Является ли Redis однопроцессным или однопоточным?

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

Почему Redis однопоточный?

Многопоточность включает в себя блокировки, а многопоточность предназначена для переключения потоков и использования ЦП. Поскольку ЦП не является узким местом Redis, узким местом Redis, скорее всего, является машинная память или пропускная способность сети. Один поток не может обеспечить производительность многоядерного процессора, но эту проблему можно решить, открыв экземпляр Redis на одном компьютере.

Преимущества Redis

  • **высокоскоростной. **Поскольку данные хранятся в памяти, аналогично HashMap, преимущество HashMap заключается в том, что временная сложность поиска и операции составляет O(1)
  • Поддержка расширенного типа данных, вспомогательная строка, список, набор, отсортированный набор, хэш
  • Поддержка бизнеса, операции атомарны, так называемая атомарность заключается в том, что изменения данных либо выполняются все, либо не выполняются вообще
  • богатые возможности: Может использоваться для кеша, сообщения, установить время истечения срока действия в соответствии с ключом, он будет автоматически удален после истечения срока действия.

В чем преимущества Redis и memcached

  • Все значения memcached представляют собой простые строки, а Reids, как их замена, поддерживает более богатые типы данных.
  • Redis намного быстрее, чем memcached
  • Redis может сохранять свои данные
  • Redis поддерживает резервное копирование данных, то есть резервное копирование данных в режиме master/slave.

Как установить срок действия и постоянную действительность ключа Redis?

EXPIREиPERSISTЗаказ.

Какие физические ресурсы в основном потребляет Redis?

ОЗУ.

Почему Redis нужно хранить все данные в памяти?

Чтобы достичь максимальной скорости чтения и записи, Redis асинхронно считывает данные в память и записывает данные на диск.

Таким образом, Redis обладает такими характеристиками, как высокая скорость и сохранение данных. Если данные не помещаются в память, скорость дискового ввода-вывода серьезно повлияет на производительность Redis.

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

Расскажите о концепции хеш-слота Redis?

Кластер Redis не использует согласованный хэш, но вводит концепцию хеш-слотов. Кластер Redis имеет 16384 хеш-слотов. После того, как каждый ключ проходит проверку CRC16, модуль 16384 используется для определения, какой слот разместить. Каждый узел кластера Отвечает за часть хеш-слот.

Что такое использование труб в Redis?

Один сервер запросов/ответов может выполнять новые запросы, даже если на старый запрос не ответили. Это позволяет отправлять несколько команд серверу, не дожидаясь ответа, и, наконец, считывает ответ за один шаг.

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

Как понять транзакцию Redis?

Транзакция — это отдельная изолированная операция: все команды в транзакции сериализуются и выполняются последовательно. Во время выполнения транзакции она не будет прервана командным запросом, отправленным другими клиентами.

Транзакция — это атомарная операция: либо выполняются все команды в транзакции, либо не выполняется ни одна из них.

Какие команды связаны с транзакциями Redis?

MULTI,EXEC,DISCARD,WATCH

Механизм рециркуляции памяти Redis

Повторное использование памяти Redis в основном вращается вокруг следующих двух аспектов:

  1. Политика истечения срока действия Redis: удалить значение ключа времени истечения
  2. Стратегия устранения Redis: запускать данные об исключении памяти, когда использование памяти достигает максимального предела памяти.

Политика истечения срока действия Redis

Обычно существует три типа стратегий истечения срока действия Redis:

  1. истечение срока действия по времениДля каждого ключа со сроком действия необходимо создать таймер, и он будет очищен сразу же после достижения срока действия. Эта стратегия может немедленно очистить просроченные данные, что очень удобно для памяти, однако для обработки просроченных данных потребуется много ресурсов ЦП, что повлияет на время отклика и пропускную способность кэша.

  2. ленивый выдохТолько при доступе к ключу будет оцениваться, истек ли срок действия ключа, и если срок его действия истек, он будет очищен. Эта стратегия может максимизировать экономию ресурсов ЦП, но очень неблагоприятна для памяти. В крайних случаях большое количество ключей с истекшим сроком действия может быть недоступно снова, поэтому они не будут очищены, занимая много памяти.

  3. Периодически истекаетЧерез регулярные промежутки времени будет сканироваться определенное количество ключей в словаре с истекшим сроком действия определенного количества баз данных, и ключи с истекшим сроком действия будут очищаться. Эта стратегия представляет собой компромисс между первыми двумя. Регулируя временной интервал запланированного сканирования и ограниченное время каждого сканирования, можно оптимально сбалансировать ресурсы ЦП и памяти в различных обстоятельствах.

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

Каковы стратегии удаления данных для Redis?

В Redis позволяют пользователю установить максимальный размер используемой памятиserver.maxmemory, когда размер набора данных памяти Redis достигает определенного размера, будет выполняться стратегия исключения данных.

  • volatile-lru: выберите наименее использовавшееся удаление из набора данных, срок действия которого истекает.
  • volatile-ttl: выберите данные, срок действия которых истекает, из набора данных, срок действия которого истекает.
  • volatile-random: произвольный выбор данных из набора данных, срок действия которого истекает.
  • allkeys-lru: выбрать наименее использованные данные из набора данных
  • allkeys-random: произвольный выбор данных из набора данных
  • noenviction: Запретить устаревшие данные

Какие виды поддержки режима сохранения Redis

постоянство RDBПринцип заключается в том, чтобы регулярно сбрасывать записи данных Redis в памяти в файл RDB на диске. Запись моментального снимка набора данных в памяти на диск в течение заданного интервала времени. Фактический процесс операции заключается в разветвлении подпроцесса. Сначала набор данных записывается во временный файл. После успешной записи предыдущий файл заменяется и сохраняется с двоичным сжатием.

Сохранение AOF (добавлять только файл)Принцип заключается в добавлении журнала операций Redis в файл. Каждая операция записи и удаления, обрабатываемая сервером, записывается в виде журнала.Операция запроса не записывается, а записывается в виде текста.Вы можете открыть файл, чтобы увидеть подробную запись операции. При перезапуске сервера эти команды выполняются повторно для восстановления исходных данных. Команда AOF добавляет и сохраняет каждую операцию записи в конец файла, используя протокол Reids. Redis также может перезаписывать файл AOF в фоновом режиме, чтобы размер файла AOF не был слишком большим.

Преимущества и недостатки двух методов сохранения Redis?

постоянство RDB

  • Преимущества: файл RDB компактный, небольшой размер, быстрая передача сети, подходящая для полной репликации; скорость восстановления намного быстрее, чем AOF. Конечно, одним из наиболее важных преимуществ RDB является относительно небольшим по сравнению с AF.
  • Недостатки: фатальным недостатком файлов RDB является то, что метод сохраняемости их моментальных снимков данных определяет невозможность сохранения в реальном времени.Сегодня, когда данные становятся все более и более важными, большая потеря данных часто недопустима, поэтому сохраняемость AOF называется мейнстримом. Кроме того, файлы RDB должны соответствовать определенному формату, а совместимость оставляет желать лучшего.

Сохранение AOFВ соответствии с сохраняемостью RDB преимущество AOF заключается в том, что он поддерживает сохраняемость второго уровня и имеет хорошую совместимость, а недостатком является большой размер файла, низкая скорость восстановления и сильное влияние на производительность.

Как выбрать стратегию режима сохраняемости Redis?

Прежде чем вводить стратегию постоянства, мы должны сначала понять, что независимо от того, является ли это RDB или AOF, постоянство требуется, чтобы платить за производительность. По сравнению с сохраняемостью RDB, с одной стороны, основной процесс Redis будет заблокирован, когда bdsave выполняет операцию форка, с другой стороны, подпроцесс также создаст нагрузку на ввод-вывод при записи данных на жесткий диск; значительно увеличена частота записи данных на жесткий диск (второй уровень в соответствии с политикой Everysec), увеличивается нагрузка на ввод-вывод, и этот параметр может привести к тому, что AOF будет добавлять блокирующие файлы. Кроме того, перезапись файлов AOF аналогична базовому сохранению RDB, и будут проблемы с блокировкой во время разветвления и давления ввода-вывода дочерних процессов. Условно говоря, поскольку AOF чаще записывает данные на жесткий диск, это окажет большее влияние на производительность основного процесса Redis.

В реальной производственной среде будут использоваться различные стратегии сохраняемости в зависимости от объема данных, требований безопасности приложений для данных, бюджетных ограничений и т. д., например, если сохраняемость вообще не используется, используйте либо RDB, либо AOF, либо коллеги. включить постоянство RDB и AOF и т. д. Кроме того, выбор постоянства необходимо рассматривать вместе со стратегией Redis «ведущий-ведомый», поскольку репликация и постоянство «главный-подчиненный» также имеют функцию резервного копирования данных, а ведущий узел и подчиненное устройство могут независимо выбирать схему сохранения.

Почему редис разделы?

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

Какова модель репликации master-slave в кластере Redis?

Чтобы кластер оставался доступным, даже если некоторые узлы выходят из строя или большинство узлов не могут обмениваться данными, в кластере используется модель репликации ведущий-ведомый, и каждый узел будет иметь реплики N-1.

Потеряет ли Redis Cluster операции записи? Зачем?

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

Как реплицировать между кластерами Redis

Асинхронная репликация.

Как Redis оптимизирует память

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

Распространенные сценарии использования Redis

  • Совместное использование сеанса (единый вход)
  • кеш страницы
  • очередь
  • Таблица лидеров/Калькулятор
  • Опубликовать/подписаться

Какие архитектурные шаблоны есть в Redis? Расскажите об их характеристиках?

единое видение

Особенности: Простой

Существует проблема:

  1. Ограниченный объем памяти
  2. ограниченная вычислительная мощность
  3. Высокая доступность невозможна

репликация master-slave

Функция репликации Redis позволяет пользователям создавать любое количество реплик сервера на основе сервера Redis, где реплицируемый сервер является главным сервером (master), а реплика, созданная репликацией, — подчиненным сервером (slave). Сетевое соединение между основным главным и подчиненным серверами нормальное, главный и подчиненный серверы будут иметь одни и те же данные, и главный сервер всегда будет синхронизировать обновления данных, которые происходят на нем, с подчиненными серверами, тем самым гарантируя, что данные главный и подчиненный серверы одинаковы.

проблема:

  1. Высокая доступность не может быть гарантирована
  2. Не снимает давление основного письма

часовой

Redis sentinel — это распределенная система, которая отслеживает главный и подчиненный серверы Redis и автоматически переключается на другой ресурс, когда главный сервер отключается. Три из этих особенностей:

  • Мониторинг: Sentinel постоянно проверяет правильность работы ваших главных и подчиненных серверов.

  • Уведомления: Sentinel может отправлять уведомления администраторам или другим приложениям через API, когда возникает проблема с одним из отслеживаемых серверов Redis.

  • Автоматический переход на другой ресурс: Sentinel инициирует операцию автоматического перехода на другой ресурс, когда первичный сервер не работает должным образом.

Функции:

  1. Гарантированная высокая доступность
  2. Мониторинг каждого узла
  3. Автоматический переход на другой ресурс

недостаток:

  1. Режим ведущий-ведомый, переключение занимает время и данные будут потеряны
  2. Не снимает давление основного письма

Кластер (тип прокси)

Twemproxy — это быстрый/легкий прокси-сервер для Redis и Memcache с открытым исходным кодом Twitter; Twemproxy — это быстрая однопоточная прокси-программа, которая поддерживает протокол Memcached ASCII и протокол Redis.

Функции:

  1. Разнообразные хеш-алгоритмы: MD5, CRC16, CRC32, CRC32A, HSIEH, MURMUR, Jenkins
  2. Поддержка автоматического удаления отказавших узлов
  3. Внутренняя логика сегментирования прозрачна для бизнеса, а методы чтения и записи бизнес-стороны соответствуют работе одного Redis.

недостаток:

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

Кластер (тип прямого подключения)

Кластеры Redis-cluster поддерживаются в версиях после redis 3.0.Redis-Cluster принимает нецентрализованную структуру.Каждый узел хранит данные и состояние всего кластера, и каждый узел связан со всеми другими узлами.

Функции:

  1. Бесцентровая архитектура (никакой узел не влияет на узкие места производительности), а прокси-уровень отсутствует.
  2. Данные распределяются по нескольким узлам в соответствии с хранилищем слотов, и данные распределяются между узлами, а распределение данных можно регулировать динамически.
  3. Масштабируемость, линейное масштабирование до 1000 узлов, узлы можно динамически добавлять или удалять.
  4. Высокая доступность, когда некоторые узлы недоступны, кластер все еще доступен. Резервное копирование данных путем добавления Slave
  5. Реализуйте автоматическое переключение при сбое, обмен информацией о состоянии между узлами через протокол сплетен и используйте механизм голосования для завершения повышения роли от ведомого до ведущего.

недостаток:

  1. Изоляция ресурса плохая, и он подвержен взаимному влиянию.
  2. Данные реплицируются асинхронно, и строгая согласованность данных не гарантируется.

Использовали ли вы распределенную блокировку Redis и как она реализована?

Сначала используйте setnx, чтобы захватить блокировку, а после ее захвата используйте expire, чтобы добавить время истечения срока действия блокировки, чтобы блокировка не забыла снять.Что делать, если процесс неожиданно завершается сбоем или перезапускается обслуживание до выполнения expire после setnx?Инструкция set имеет очень сложные параметры, она должна одновременно объединять setnx и expire в одну инструкцию!

Используется Redis, что делать асинхронную очередь, как вы используете? Каковы недостатки?

Как правило, структура списка используется в качестве очереди, rpush создает сообщения, а lpop потребляет сообщения. Когда нет сообщения от lpop, немного поспите и попробуйте еще раз.

недостаток:

  • В случае, если потребители находятся в автономном режиме, созданные сообщения будут потеряны, и необходимо использовать профессиональные очереди сообщений, такие как rabbitmq.
  • Можно ли его произвести один раз, а потреблять много раз?
  • Используя шаблон подписчика темы публикации/подписки, можно реализовать очередь сообщений 1:N.

Что такое проникновение в кеш? Как этого избежать?

проникновение в кеш

Общая система кэширования кэширует запросы в соответствии с ключом. Если соответствующего значения нет, он должен обратиться к серверной системе, чтобы найти его (например, БД). Некоторые вредоносные запросы намеренно запрашивают несуществующие ключи, а объем запросов будет очень большим, что вызовет большую нагрузку на серверную систему. Это называется проникновением в кэш.

Как этого избежать?

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

  2. Ключи фильтра, которые не должны существовать. Вы можете поместить все возможные ключи в большое растровое изображение и фильтровать растровое изображение при запросе.

Что такое кэш-лавина? Как этого избежать?

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

Как этого избежать?

  1. После того, как кеш становится недействительным, количество потоков, читающих базу данных и записывающих в кеш, контролируется блокировкой или постановкой в ​​очередь. Например, только одному потоку разрешено запрашивать данные и записывать кэш для определенного ключа, а другие потоки ждут.
  2. В качестве кеша второго уровня A1 является исходным кешем, A2 — кешем копии, при сбое A1 вы можете получить доступ к A2, срок действия кеша A1 установлен на краткосрочный, A2 установлен на долгосрочный 3: разные ключи , установите разные сроки действия, чтобы кэшировать недействительные временные точки как можно более равномерно

параллелизм кеша

Параллелизм здесь относится к одновременному набору нескольких клиентов Redis. Проблемы параллелизма, вызванные ключами. По сути, сам redis является однопоточной операцией, и несколько клиентов работают одновременно, по принципу «первым пришел — первым выполняется», выполняется первый пришел — первый — выполнение, а остальные блокируются. Конечно, другое решение — сериализовать операции redis.set в очередь, которые должны выполняться одна за другой.

прогрев кеша

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

Это может избежать проблемы с запросом сначала к базе данных, а затем кэшированием данных, когда пользователь запрашивает! Пользователь напрямую запрашивает предварительно прогретые кэшированные данные!

Решения:

  1. Напишите страницу обновления кеша напрямую и управляйте ею вручную при подключении к сети;
  2. Объем данных невелик, и они могут загружаться автоматически при запуске проекта;

Цель состоит в том, чтобы загрузить данные в кеш до того, как система перейдет в режим онлайн.

Как работает процесс утилизации Redis?

  1. Клиент выполняет операцию записи данных
  2. После того, как сервер redis получает операцию записи, он проверяет лимит maxmemory, если лимит превышен, то часть данных очищается согласно соответствующей политике.
  3. Операция записи завершает выполнение.

Redis является однопоточным, как улучшить использование многоядерного процессора?

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

Будет ли изменение конфигурации вступать в силу в режиме реального времени без перезапуска Redis?

Для работающего экземпляра существует множество параметров конфигурации, которые можно изменить с помощью команды CONFIG SET без выполнения какого-либо перезапуска. Начиная с Redis 2.2, можно переключиться с AOF на сохранение моментальных снимков RDB или иным образом без перезапуска Redis. забратьCONFIG GET *команду для получения дополнительной информации. Но иногда требуется перезапуск, например, чтобы обновить программу Redis до новой версии или когда вам нужно изменить некоторые параметры конфигурации, которые в настоящее время не поддерживаются командой CONFIG.

Память Redis заканчивается, что произойдет?

Если достигнут верхний предел, команда записи Redis вернет сообщение об ошибке (но команда чтения все еще может завершиться нормально). Или вы можете использовать Redis в качестве кеша для использования механизма устранения конфигурации, и когда Redis достигнет предела памяти, старый контент будет сброшен.

Должен ли распределенный Redis быть сделан на ранней стадии или на более поздней стадии, когда масштаб увеличивается? Зачем?

Поскольку Redis очень легкий (один экземпляр использует только 1 МБ памяти), чтобы предотвратить дальнейшее расширение, лучший способ — запустить больше экземпляров в начале. Даже если у вас есть только один сервер, вы можете запустить Redis в распределенном режиме, используя разделы и запуская несколько экземпляров на одном сервере. Установка еще нескольких экземпляров Redis в начале, например 32 или 64 экземпляра, может быть обременительной для большинства пользователей, но в долгосрочной перспективе это стоит жертв. Таким образом, когда ваши данные продолжают расти и вам нужно больше серверов Redis, все, что вам нужно сделать, это просто перенести экземпляр Redis с одного сервера на другой (не беспокоясь о перераспределении). После добавления еще одного сервера вам потребуется перенести половину экземпляров Redis с первого компьютера на второй.

Чем Redis отличается от других хранилищ ключей и значений?

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

Подпишитесь, чтобы поделиться


Хорошая рекомендация статьи: