Вопросы Redis, которые необходимо задавать на собеседованиях в интернет-компании

интервью Redis база данных сервер

图片描述Redis — очень популярная нереляционная база данных. Насколько она популярна? Пока это интернет-компания, ею будут пользоваться. Можно сказать, что вопросы, связанные с Redis, задают на собеседованиях.Ниже я обобщу несколько моментов, которые необходимо усвоить из моего личного опыта интервьюера. Введение: Redis — это нереляционная база данных с открытым исходным кодом, написанная на языке ANSI C, соответствующая протоколу BSD, поддерживающая сеть, постоянный журнал в памяти, базу данных «ключ-значение» и предоставляющая API-интерфейсы на нескольких языках. Традиционные базы данных следуют правилам ACID. Nosql (сокращение от Not Only SQL, которое является общим термином для систем управления базами данных, отличных от традиционных реляционных баз данных) обычно распространяется и следует теореме CAP. Исходный код на гитхабе:GitHub.com/Антиэнтузиазм/Горячие…Официальный сайт Redis:redis.io/

Типы данных, поддерживаемые Redis?

  • Строковая строка:

Формат: установить значение ключа Строковый тип является двоично-безопасным. Означает, что строка redis может содержать любые данные. Например, изображения в формате jpg или сериализованные объекты. Строковый тип является самым основным типом данных Redis, и ключ может хранить до 512 МБ.

  • Хэш

Формат: hmset имя ключ1 значение1 ключ2 значение2 Хэш Redis — это набор пар ключ-значение (ключ=>значение). Хэш Redis — это таблица сопоставления поля и значения строкового типа, а хэш особенно подходит для хранения объектов.

  • Список

Списки Redis — это простые списки строк, отсортированные по порядку вставки. Вы можете добавить элемент в начало (слева) или хвост (справа) списка Формат: значение имени lpush Добавить строковый элемент в начало списка, соответствующий ключу Формат: значение имени rpush Добавить строковый элемент в конец списка, соответствующий ключу Формат: указатель имени рем key соответствует удалению элементов count в списке, которые совпадают со значением Формат: лен имя
Возвращает длину списка, соответствующего ключу

  • Набор

Формат: значение имени sadd Redis Set — это неупорядоченная коллекция строкового типа. Наборы реализуются через хеш-таблицы, поэтому добавление, удаление и поиск выполняются за O(1).

  • zset (отсортированный набор: отсортированный набор)

Формат: значение оценки имени zadd Redis zset, как и набор, также представляет собой набор элементов строкового типа и не допускает дублирования элементов. Разница в том, что каждый элемент связан с дробью типа double. Redis сортирует элементы набора от меньшего к большему по количеству баллов. Члены zset уникальны, но счет может повторяться.

Что такое постоянство Redis? Какие методы сохранения есть в Redis? Какие преимущества и недостатки?

Постоянство — это запись данных из памяти на диск, чтобы предотвратить потерю данных памяти, когда служба не работает. Redis предоставляет два метода сохранения: RDB (по умолчанию) и AOF.РБД: 图片描述rdb — это аббревиатура Redis DataBase. Функция ядра функции rdbSave (создание файла RDB) и rdbLoad (загрузка памяти из файла) две функцииAOF: 图片描述Aof — аббревиатура файла, предназначенная только для добавления. Функция flushAppendOnlyFile вызывается всякий раз, когда выполняется серверная (временная) задача или функция.Эта функция выполняет следующие две задачи. aof написать сохранить: ЗАПИСАТЬ: Записать кеш в aof_buf в файл AOF в соответствии с условием СОХРАНИТЬ: В зависимости от условий вызовите функцию fsync или fdatasync, чтобы сохранить файл AOF на диск.Структура хранения:Содержимое представляет собой хранилище текста команды в формате протокола связи Redis (RESP). сравнивать:

  1. Файлы aof обновляются чаще, чем rdb, и для восстановления данных предпочтительнее использовать aof.
  2. aof более безопасен и больше, чем rdb
  3. производительность rdb лучше, чем aof
  4. Если оба настроены с приоритетной загрузкой AOF

Только что вы упомянули протокол связи Redis (RESP), можете ли вы объяснить, что такое RESP? Каковы характеристики?

(Вы можете видеть, что многие интервью на самом деле являются серийным оружием. Интервьюер на самом деле ждет, когда вы ответите на этот вопрос. Если вы ответите на свою оценку, вы добавите еще один балл.) 图片描述RESP — это протокол связи, который ранее использовался клиентом и сервером Redis; Особенности РЕСП: Простая реализация, быстрый синтаксический анализ и хорошая читабельность

  • Для простых строк первым байтом ответа является ответ «+».
  • Для ошибок первым байтом ответа является "-" ошибка
  • Для целых чисел первым байтом ответа является ":"
  • Для групповых строк первым байтом ответа является строка «$».
  • Для массивов первым байтом ответа является массив "*"

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

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

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

  1. главные/подчиненные роли
  2. данные master/slave одинаковые
  3. Уменьшите давление основного чтения при переносе из библиотеки

проблема:

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

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

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

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

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

Функции:

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

Недостатки: режим master-slave, переключение требует времени для потери данных

Не устраняет давление основного письма

Кластер (тип прокси):图片描述

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. Данные реплицируются асинхронно, и строгая согласованность данных не гарантируется.

Что такое последовательный алгоритм хеширования? Что такое хэш-слот?

Эти два вопроса слишком длинные Я нашел две хорошие статьи в Интернете.

Блог Woohoo.cn на.com/LP future/afraid/…

blog.CSDN.net/по адресу 1573262158…

Redis основан на теории CAP, что такое теория CAP?

Вы можете обратиться к моей предыдущей статье.

Если кто-нибудь спросит вас, что такое теория CAP, пришлите ему эту статью.

Общие команды Redis?

  • Keys pattern

Указывает все распределения начиная с бита Проверьте, существует ли ключ Exists

  • Set

Установите значение, соответствующее ключу, в значение типа string.

  • setnx

Установите значение, соответствующее ключу, в значение типа string. Если ключ уже существует, вернуть 0, а nx означает, что он не существует. удалить ключ В первый раз возвращается 1. При удалении во второй раз возвращается 0.

  • Expire

Установите время истечения (в секундах)

  • TTL

Посмотрите, сколько времени осталось

  • Setex

Установите значение, соответствующее ключу, в значение типа string и укажите срок действия, соответствующий этому значению ключа.

  • Mset

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

  • Getset

Установите значение ключа и верните старое значение ключа.

  • Mget

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

  • Incr

Добавьте значение ключа и верните новое значение. Обратите внимание, что incr значение, которое не является int, вернет ошибку, incr несуществующий ключ, установите ключ в 1

  • incrby

Подобно incr, добавьте указанное значение, когда ключ не существует, ключ будет установлен, а исходное значение считается равным 0.

  • Decr

Значение ключа вычитается и вычитается.Если в decr нет ключа, установите ключ в -1

  • Decrby

То же, что и decr, за вычетом указанного значения.

  • Append

Добавляет value к строковому значению указанного ключа, возвращая длину нового строкового значения.

  • Strlen

Получить длину значения указанного ключа.

  • persist

Отменить срок действия

  • Select

выберите базу данных

  • Randomkey

вернуть случайный ключ

  • Rename

Переименовать

  • Type

возвращаемый тип данных

Использовали ли вы распределенную блокировку 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: Разные ключи, установите разное время истечения срока действия, чтобы время аннулирования кеша было как можно более однородным.

Контент более организован в виде карты мозга, которую удобно запомнить каждому.图片描述Недавно я начал групповой чат. Изучайте галантерейные товары с передовыми технологиями Java, делитесь опытом, продвигайтесь по службе и вместе обсуждайте идеалы. Друзья-единомышленники, присоединяйтесь к нам.

Ладно, удачи на собеседовании!