Подробное объяснение вопросов интервью Redis: Sentinel + Replication + Transaction + Cluster + Persistence и т. д.

Java

file

Каковы основные функции Redis?

1. Sentinel и репликация

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

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

Redis также использует эти две функции для обеспечения высокой доступности Redis.

2. Дела

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

3.LUA-скрипт

На основе транзакций, если нам нужно выполнить более сложные операции (включая некоторые логические суждения) на стороне сервера за один раз, то можно использовать lua.

4. Настойчивость

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

5. Кластер

Для ресурсов одного сервера всегда существует верхний предел.Мы можем разделить чтение и запись посредством репликации master-slave для ресурсов ЦП и ресурсов ввода-вывода и передать часть нагрузки ЦП и ввода-вывода подчиненному серверу, что аналогично к master-slave базы данных MySQL.

До того, как официальное распределенное решение Redis вышло, было два решения, twemproxy и codis, Вообще говоря, эти два решения полагаются на прокси для распространения.

file

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

Поддерживает несколько типов структур данных

1.string: самый простой тип данных, безопасная для двоичных файлов строка с максимальным размером 512M.

2.list: Список строк в порядке добавления.

3.set: неупорядоченный набор строк без повторяющихся элементов.

4.sorted set: отсортированный набор строк.

5.hash: набор пар ключ-значение.

file

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

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

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

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

Модель, принятая другим программным обеспечением с открытым исходным кодом

Nginx: многопроцессорная однопоточная модель

Memcached: многопоточная модель с одним процессом

Преимущества использования Redis?

1. Быстрый, т.к. данные хранятся в памяти, аналогично HashMap, преимущество HashMap в том, что временная сложность поиска и работы O(1)

  • Поддержка расширенных типов данных, поддержка строки, списка, набора, отсортированного набора, хэша

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

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

Одноточечная пропускная способность Redis

Одноточечный TPS достигает 80 000/сек, QPS достигает 100 000/сек, дополняет концепцию TPS и QPS

1.QPS: максимальное количество посещений пользователей в секунду, которое может принять прикладная система.

Сколько раз запрос обрабатывается в секунду. Обратите внимание, что здесь обрабатывается. В частности, это означает, что запрос отправлен на сервер и результат успешно возвращен. Можно понять, что на сервере стоит счетчик, каждый раз при обработке запроса добавляется 1. Через 1 секунду counter=QPS.

2.TPS: максимальное количество запросов, которые могут быть обработаны в секунду.

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

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

1. Все значения memcached — простые строки, а Redis, как их замена, поддерживает более богатые типы данных

2.Redis намного быстрее, чем memcached

3. Redis может сохранять свои данные

4. Redis поддерживает резервное копирование данных, то есть резервное копирование данных в режиме master-slave.

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

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

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

2. volatile-ttr: выберите данные, срок действия которых истекает, из набора данных, срок действия которого истекает.

3. volatile-random: произвольный выбор данных для исключения из набора данных, срок действия которого истекает.

4.allkeys-lru: выберите данные из набора данных, которые использовались наименее недавно, чтобы исключить

5.allkeys-random: произвольный выбор данных из набора данных для исключения

6.noenviction: запретить удаление данных

Когда Redis удаляет данные, они также будут синхронизированы с aof.

Как должно быть реализовано кластерное решение Redis? Какие планы?

1.twemproxy

2. Codis, наиболее часто используемое кластерное решение в настоящее время, имеет в основном тот же эффект, что и twemproxy, но поддерживает то, что при изменении количества узлов данные старого узла могут быть восстановлены на новом хеш-узле.

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

Модель разделения чтения и записи Redis

Увеличивая количество подчиненных БД, производительность чтения может увеличиваться линейно. Чтобы избежать единой точки отказа главной базы данных, кластер обычно использует две главные базы данных для горячего резервного копирования двух систем, поэтому доступность чтения и записи всего кластера очень высока.

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

Модель разделения данных Redis

Чтобы устранить недостатки модели разделения чтения-записи, можно применить модель разделения данных.

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

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

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

Метод сохраняемости RDB может хранить моментальные снимки ваших данных через определенные промежутки времени.

Метод сохраняемости AOF записывает каждую операцию записи на сервер. При перезапуске сервера эти команды будут выполняться повторно для восстановления исходных данных. Команда AOF добавляет и сохраняет каждую операцию записи в конец файла с использованием протокола Redis. Redis также может записывать в AOF. Файл перезаписывается в фоновом режиме, поэтому размер файла AOF не будет слишком большим.

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

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

Самое главное — понять разницу между сохраняемостью RDB и AOF, давайте начнем с сохраняемости RDB.

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

  • Redis в основном предоставляет два механизма сохранения: **RDB и AOF;

2,RDB

По умолчанию он сделает снимок данных в памяти на диск в соответствии с указанным временем конфигурации, создаст файл dump.rdb и восстановит его в памяти при запуске Redis.

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

Следует отметить, что каждый сохраняемый снимок будет снова копировать данные базы данных основного процесса, что приведет к удвоению накладных расходов на память.Если памяти в это время недостаточно, сервер будет заблокирован до тех пор, пока память не будет освобождена после завершения копирования. ; данные памяти будут полностью записаны.Диск один раз, поэтому, если объем данных большой и операции записи выполняются часто, это неизбежно приведет к большому количеству дисковых операций ввода-вывода, что серьезно повлияет на производительность, и данные после последняя настойчивость может быть потеряна;

3.AOF

Каждая операция записи записывается в виде лога (операции чтения не записываются. Вам нужно только дописать файл, но перезаписать файл нельзя. При запуске Redis выполнит его от начала до конца в соответствии с log для завершения восстановления данных. В том числе и flushDB тоже выполняется.

Существует два основных способа срабатывания: запись, когда есть операция записи, и запись регулярно каждую секунду (а также потеря данных).

Поскольку AOF принимает метод добавления, файл будет становиться все больше и больше.В ответ на эту проблему был добавлен новый механизм перезаписи, то есть, когда файл журнала достигает определенного размера, новый процесс будет разветвлен для прохождения данные в памяти процесса. , каждая запись соответствует оператору set, записанному во временный файл, а затем замененному старым файлом журнала (аналогично тому, как работает rdb). Триггер по умолчанию возникает, когда размер файла aof удваивается после последней перезаписи, а размер файла превышает 64 МБ.

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

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

Общие проблемы с производительностью Redis и решения?

(1) Мастеру лучше не выполнять никакой постоянной работы, такой как снимки памяти RDB и файлы журнала AOF.

(2) Если данные более важны, ведомое устройство позволяет AOF выполнять резервное копирование данных, а политика настроена на синхронизацию один раз в секунду.

(3) Для скорости репликации master-slave и стабильности соединения лучше всего, чтобы Master и Slave находились в одной локальной сети.

(4) Старайтесь избегать добавления подчиненных библиотек в основную библиотеку под большим давлением.

(5) Не используйте структуру графа для репликации master-slave.Более стабильно использовать структуру односвязного списка, то есть: Master

Эта структура удобна для решения проблемы единой точки отказа и реализации замены ведущего ведомым. Если Master зависнет, вы можете сразу включить Slave1 в качестве Master, а остальные останутся без изменений.

Какие клиенты Java поддерживаются Redis? Какая официальная рекомендация?

Redisson, Jedis, салат и т. д. официально рекомендуется Redisson.

Концепция хеш-слотов Redis?

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

Каково максимальное количество узлов в кластере Redis?

Кластер Redis предварительно разделен на 16384 корзины (хеш-слоты)

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

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

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

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

Как происходит репликация между кластерами Redis?

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

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

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

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

Клиент запускает новую команду, добавляя новые данные.

Redi проверяет использование памяти, и если оно превышает лимит maxmemory, оно будет переработано в соответствии с установленной политикой.

Какой алгоритм использует Redis?

Алгоритм LRU

Каковы подходящие сценарии для Redis?

1) Совместное использование сеанса (единый вход)

2) Кэширование страницы

3) Очередь

4) Таблица лидеров/счетчик

5) Опубликовать/подписаться

Эта статья опубликована в блогеOpenWriteвыпускать!