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). сравнивать:
- Файлы aof обновляются чаще, чем rdb, и для восстановления данных предпочтительнее использовать aof.
- aof более безопасен и больше, чем rdb
- производительность rdb лучше, чем aof
- Если оба настроены с приоритетной загрузкой AOF
Только что вы упомянули протокол связи Redis (RESP), можете ли вы объяснить, что такое RESP? Каковы характеристики?
(Вы можете видеть, что многие интервью на самом деле являются серийным оружием. Интервьюер на самом деле ждет, когда вы ответите на этот вопрос. Если вы ответите на свою оценку, вы добавите еще один балл.) RESP — это протокол связи, который ранее использовался клиентом и сервером Redis; Особенности РЕСП: Простая реализация, быстрый синтаксический анализ и хорошая читабельность
- Для простых строк первым байтом ответа является ответ «+».
- Для ошибок первым байтом ответа является "-" ошибка
- Для целых чисел первым байтом ответа является ":"
- Для групповых строк первым байтом ответа является строка «$».
- Для массивов первым байтом ответа является массив "*"
Какие архитектурные шаблоны есть в Redis? Расскажите об их характеристиках
единое видение Особенности: Простой проблема: 1. Ограниченный объем памяти 2. Ограниченная вычислительная мощность 3. Высокая доступность невозможна.
репликация master-slave Функция репликации Redis позволяет пользователям создавать любое количество реплик сервера на основе сервера Redis, где реплицируемый сервер является главным сервером (master), а реплика сервера, созданная репликацией, — подчиненным сервером (slave). Пока сетевое соединение между главным и подчиненным серверами нормальное, главный и подчиненный серверы будут иметь одни и те же данные, и главный сервер всегда будет синхронизировать обновления данных, которые происходят на нем, с подчиненными серверами, таким образом гарантируя, что главный и подчиненные серверы имеют те же данные. Функции:
- главные/подчиненные роли
- данные master/slave одинаковые
- Уменьшите давление основного чтения при переносе из библиотеки
проблема:
- Высокая доступность не может быть гарантирована
- Не устраняет давление основного письма
часовойRedis sentinel — это распределенная система, которая отслеживает главный и подчиненный серверы Redis и автоматически переключается на другой ресурс, когда главный сервер отключается. Три из этих особенностей:
Мониторинг: Sentinel постоянно проверяет правильность работы ваших главных и подчиненных серверов.
Уведомления: Sentinel может отправлять уведомления администраторам или другим приложениям через API, когда возникает проблема с одним из отслеживаемых серверов Redis.
Автоматический переход на другой ресурс: Sentinel инициирует операцию автоматического перехода на другой ресурс, когда первичный сервер не работает должным образом.
Функции:
- Гарантированная высокая доступность
- следить за каждым узлом
- Автоматический переход на другой ресурс
Недостатки: режим master-slave, переключение требует времени для потери данных
Не устраняет давление основного письма
Кластер (тип прокси):
Twemproxy — это быстрый/легкий прокси-сервер для Redis и Memcache с открытым исходным кодом Twitter; Twemproxy — это быстрая однопоточная прокси-программа, которая поддерживает протокол Memcached ASCII и протокол Redis.
Функции:
- Различные алгоритмы хеширования: MD5, CRC16, CRC32, CRC32a, hsieh, murmur, Jenkins.
- Поддержка автоматического удаления отказавших узлов
- Внутренняя логика сегментирования прозрачна для бизнеса, а методы чтения и записи бизнес-стороны соответствуют работе одного Redis.
недостаток:
- Добавлен новый прокси, и необходимо поддерживать его высокую доступность.
- Логика аварийного переключения должна быть реализована сама по себе, и она не может поддерживать автоматический перенос сбоев.Масштабируемость плохая, и для расширения и сокращения требуется ручное вмешательство.
Кластер (тип прямого подключения):
Кластеры Redis-cluster поддерживаются с версии redis 3.0.Redis-Cluster использует нецентрализованную структуру.Каждый узел хранит данные и состояние всего кластера, и каждый узел подключен ко всем другим узлам.
Функции:
- Бесцентровая архитектура (никакой узел не влияет на узкие места производительности), а прокси-уровень отсутствует.
- Данные распределяются по нескольким узлам в соответствии с хранилищем слотов, и данные распределяются между узлами, а распределение данных можно регулировать динамически.
- Масштабируемость, линейное масштабирование до 1000 узлов, узлы можно динамически добавлять или удалять.
- Высокая доступность, когда некоторые узлы недоступны, кластер все еще доступен. Резервное копирование данных путем добавления Slave
- Реализуйте автоматическое переключение при сбое, обмен информацией о состоянии между узлами через протокол сплетен и используйте механизм голосования для завершения повышения роли от ведомого до ведущего.
недостаток:
- Изоляция ресурса плохая, и он подвержен взаимному влиянию.
- Данные реплицируются асинхронно, и строгая согласованность данных не гарантируется.
Что такое последовательный алгоритм хеширования? Что такое хэш-слот?
Эти два вопроса слишком длинные Я нашел две хорошие статьи в Интернете.
Блог 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, делитесь опытом, продвигайтесь по службе и вместе обсуждайте идеалы. Друзья-единомышленники, присоединяйтесь к нам.
Ладно, удачи на собеседовании!