Знакомые с этими часто задаваемыми вопросами интервью Redis, не беспокойтесь об интервью

Redis

1. Каковы сценарии применения Redis?

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

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

2. Почему однопоточный Redis такой быстрый?

Насколько быстр Redis? Официальный ответ — скорость чтения и записи — 100 000/сек, что неудивительно, но Redis — однопоточный. Почему однопоточный Redis такой быстрый? Есть три причины:

  • чистая работа с памятью: Redis полностью основан на памяти, поэтому эффективность чтения и записи очень высока. Конечно, в Redis есть постоянные операции. Все постоянные операции выполняются дочерними процессами ветвления и с использованием технологии кэширования страниц системы Linux, которая не влияет на производительность Redis.
  • однопоточная операция: Один поток — это неплохо, один поток позволяет избежать частого переключения контекста, а частое переключение контекста также влияет на производительность.
  • Разумная и эффективная структура данных
  • Использует неблокирующий механизм мультиплексирования ввода-вывода.: Модель многоканального мультиплексирования ввода-вывода — это возможность использовать выбор, опрос и epoll для одновременного мониторинга событий ввода-вывода нескольких потоков. потоки имеют Когда происходит событие ввода-вывода, он выходит из состояния блокировки, поэтому программа будет опрашивать все потоки (epoll опрашивает только те потоки, которые фактически генерируют события) и последовательно обрабатывать только готовые потоки. подход позволяет избежать множества бесполезных операций.

3. Расскажите о структуре данных и сценариях использования Redis.

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

1. Строка Строка

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

2. Хэш

В Redis тип хеша означает, что само значение ключа представляет собой структуру пары ключ-значение, например, значение={{поле1, значение1}, ...{полеN, значениеN}}, добавьте команду: значение поля ключа hset. Хэш может использоваться для хранения информации о пользователе, например, для реализации корзины покупок.

3. Список списка

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

4. Установить коллекцию

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

5. Отсортированный набор

Sorted Set имеет дополнительный весовой параметр Score, и элементы в наборе можно расположить в соответствии с Score. Может использоваться в качестве приложения для таблицы лидеров, возьмите операцию TOP N

4. Расскажите о политике истечения срока действия данных Redis

Позвольте мне сначала сделать вывод: стратегия истечения срока действия данных в Redis принимаетПериодическое удаление + стратегия ленивого удаления.

1. Каковы стратегии обычного удаления и отложенного удаления?

  • Периодически удалять политики: Redis позволяет таймеру регулярно отслеживать все ключи, чтобы определить, истек ли срок действия ключа, и удалить его, если срок его действия истек. Эта стратегия может гарантировать, что просроченный ключ в конечном итоге будет удален, но у нее есть и серьезные недостатки: она каждый раз перебирает все данные в памяти, что потребляет много ресурсов процессора, ключ все еще будет доступен в это время.
  • Ленивая стратегия удаления: При получении ключа сначала определите, истек ли срок действия ключа, и удалите его, если срок его действия истек. У этого способа есть недостаток: если ключ не использовался, он всегда будет в памяти, по сути, срок его действия истек, что приведет к потере большого количества места.

2. Как работает стратегия обычного удаления + отложенного удаления?

Эти две стратегии естественным образом дополняют друг друга.После объединения стратегия удаления таймингов претерпела некоторые изменения.Вместо того, чтобы каждый раз сканировать все ключи, для проверки случайным образом выбирается часть ключей, что снижает потребление ресурсов ЦП. стратегия удаления дополняет проверенные ключи и в основном выполняет все требования.Но иногда настолько случайно, что не извлекается таймером и не используется, так как же данные исчезают из памяти?? Не беда, есть еще механизм ликвидации памяти, когда памяти не хватает, в дело вступает механизм ликвидации памяти. Механизм устранения памяти Redis имеет следующие стратегии:

  • noeviction: когда памяти недостаточно для размещения вновь записанных данных, новая операция записи сообщит об ошибке. (Политика Redis по умолчанию)
  • allkeys-lru: когда памяти недостаточно для размещения вновь записанных данных, в пространстве ключей удалите последний использованный ключ. (Рекомендуемое использование)
  • allkeys-random: когда памяти недостаточно для размещения вновь записанных данных, в ключевом пространстве удалить ключ случайным образом.
  • volatile-lru: когда памяти недостаточно для размещения вновь записанных данных, в ключевом пространстве с установленным временем истечения срока действия удалите наименее недавно использовавшийся ключ. Эта ситуация обычно используется, когда Redis используется как в качестве кэша, так и в качестве постоянного хранилища.
  • volatile-random: когда памяти недостаточно для размещения вновь записанных данных, ключ случайным образом удаляется в ключевом пространстве с установленным временем истечения срока действия.
  • volatile-ttl: когда памяти недостаточно для размещения вновь записанных данных, в ключевом пространстве с установленным временем истечения срока действия сначала будет удален ключ с более ранним сроком действия.

Чтобы настроить механизм исключения памяти, вам нужно только настроить параметр maxmemory-policy в конфигурационном файле redis.conf.

5. Как решить проблему проникновения кеша Redis и лавины кеша

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

Предотвращение и устранение лавины кеша, вы можете начать со следующих трех аспектов:

  • 1. Используйте архитектуру высокой доступности Redis: Используйте кластер Redis, чтобы гарантировать, что служба Redis не зависнет.
  • 2. Время кеша несовместимо:Добавьте случайное значение во время инвалидации кеша, чтобы избежать коллективной инвалидации
  • 3. Текущая стратегия ограничения и понижения рейтинга: есть определенная запись, например, служба персонализированных рекомендаций недоступна, а служба рекомендаций по горячим данным заменена.

Проникновение в кэш:Под проникновением в кеш понимается запрос данных, которых вообще не существует.Таких данных точно нет в кеше, из-за чего все запросы будут падать на БД, и БД может быть недоступна.

Предотвращение и устранение проблем с проникновением в кэш, можно рассмотреть следующие два метода:

  • 1. Кэшировать пустые объекты:Кешируйте нулевые значения, но с этим есть проблема, много недопустимых нулевых значений будут занимать место, что очень расточительно.
  • 2. Перехват фильтра Блума:Сначала сопоставьте все возможные ключи запроса с фильтром Блума. При запросе сначала определите, существует ли ключ в фильтре Блума, а затем продолжите выполнение вниз, если он существует. Если он не существует, он вернется напрямую. Фильтры Блума имеют определенные ложные срабатывания, поэтому вашему бизнесу необходимо обеспечить определенную отказоустойчивость.

В конце концов

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

Добро пожаловать, чтобы отсканировать код и подписаться на общедоступную учетную запись WeChat: «Технический блог брата Пинтоу». Брат Пинтоу будет учиться и добиваться успехов вместе.

平头哥的技术博文