Серия "Войдём на большой завод вместе" - Фонд Redis

Java Redis
Серия "Войдём на большой завод вместе" - Фонд Redis

Чем больше вы знаете, тем больше вы не знаете

Ставьте лайк и смотрите снова, формируйте привычку

GitHubоткрытый источникgithub.com/JavaFamily, есть карта мозга интервью с большой фабрикой первой линии, добро пожаловать в звезду и улучшайте

Интервью начинается

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

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

Я не мог не ругать в душе, что это за проблема, не все этим пользуются, а говорить нельзя.

Серьезно ответил:привет красивый интервьюер, поскольку традиционные реляционные базы данных, такие как Mysql, больше не применимы ко всем сценариям, таким как вычет пиковых значений инвентаризации, пиковый трафик доступа на домашней странице приложения и т. д., базу данных легко сломать, поэтому внедрение промежуточного программного обеспечения кэширования , текущий рынокRedisиMemcachedОднако Zhonghe рассмотрел их преимущества и недостатки и в конце концов выбрал Redis.

Что касается более подробного сравнения, друзья, не забудьте проверить разницу между Redis и Memcached, например, сравнение преимуществ и недостатков этих двух и их соответствующих сценариев, я напишу их позже, когда у меня будет время.

Этот парень, позвольте мне еще раз спросить вас, какие структуры данных есть в Redis?

String,Hash,List,Set,SortedSet.

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

Однако, если вы являетесь расширенным пользователем redis, и вы хотите выделить различия между вами и другими кандидатами в этом интервью, вам необходимо добавить следующие структуры данныхHyperLogLog, Гео, Pub/Sub.

Если вы все еще хотите добавить очки, значит, вы сказали, что игралиRedis Module,рисунокBloomFilter, RedisSearch, Redis-ML,В это время у интервьюера начали загораться глаза, когда он думал об этом молодом человеке.что-то.

Примечание: когда я отвечал на вопросы, связанные с Redis в интервью, я часто упоминал, что BloomFilter (Фильтр Блума) используется во многих сценариях, и он действительно ароматен в использовании, и принцип прост для понимания. Вы можете свободно говорить перед интервьюером, разве это не мило? Портал ниже ↓

BloomFilter, острый инструмент, чтобы избежать поломки кеша

Если есть большое количество ключей, срок действия которых нужно установить одновременно, на что следует обратить внимание?

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

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

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

взять первымsetnxПодойди и возьми замок, схватив его, используй его снова.expireДобавьте время истечения срока действия блокировки, чтобы предотвратить забвение блокировки.

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

На этот раз вам предстоит дать неожиданную обратную связь: увы, да, блокировка никогда не будет снята. Далее вам нужноВозьмитесь за голову и сделайте вид, что задумались на мгновение, похоже, следующий результат вы активно обдумывали, а потом ответили: я помню, что команда set имеет очень сложные параметры, это должно иметь возможность установитьsetnxиexpireСинтезируйте одну инструкцию для использования!

Другая сторона в это время покажет улыбку, и он начнет медитировать в своем сердце: Ну, этот ребенок неплох, и это начинает быть интересным. Если в Redis 100 миллионов ключей, а ключи 10w начинаются с фиксированного и известного префикса, как их все найти?

использоватьkeysКоманда может очистить список ключей указанного режима.

Затем другая сторона спросила: если этот Redis предоставляет услуги для онлайн-бизнеса, в чем проблема с использованием команды ключей?

В настоящее время вы должны ответить на ключевую функцию Redis: единый поток Redis. Инструкция keys приведет к блокировке потока на определенный период времени, а онлайн-служба будет приостановлена ​​до тех пор, пока инструкция не будет выполнена, и служба может быть возобновлена. Можно использовать в это времяscanинструкция,scanИнструкция может извлечь список ключей заданного режима без блокировки, но будет определенная вероятность повторения.Достаточно сделать дедупликацию на стороне клиента, но общие затраты времени будут больше, чем на использование ключей инструкция напрямую.

Однако команды инкрементной итерации не лишены своих недостатков: например, с помощью команды SMEMBERS можно вернуть все элементы, содержащиеся в данный момент в заданном ключе, но для команд инкрементной итерации, таких как SCAN, поскольку ключ увеличивается. Во время инкрементальной итерации ключи могут быть изменены, поэтому команда инкрементной итерации может предоставить только ограниченные гарантии в отношении возвращаемых элементов.

Использовали ли вы Redis для асинхронных очередей и как вы их использовали?

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

Если другая сторона спросит, можно ли не спать?

список также имеет команду под названиемblpop, при отсутствии сообщения блокируется до тех пор, пока сообщение не придет.

Если другая сторона затем спросит, можно ли это произвести один раз и потреблять много раз?

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

Если другая сторона продолжает спрашивать, каковы недостатки pub/sub?

В случае, если потребители находятся в автономном режиме, созданные сообщения будут потеряны, а профессиональные очереди сообщений, такие какRocketMQЖдать.

Если TM другой стороны спросит, как Redis реализует очередь задержки?

С этим комбо, я думаю, теперь вы действительно хотите забить интервьюера до смерти (Интервьюер хотел покончить с собой, зачем он задавал столько вопросов, которых не знал?), если у вас в руке бейсбольная бита, но вы скованы. Он успокоил свое взволнованное сердце, а затем спокойно ответил: используйте sortedset, используйте метку времени в качестве оценки, содержимое сообщения в качестве ключа и вызовите zadd для создания сообщений, потребители используютzrangebyscoreИнструкция извлекает опросы данных N секунд назад для обработки.

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

Как Redis сохраняется? Как взаимодействуют данные службы master-slave?

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

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

Другая сторона спросила, что произойдет, если машина внезапно потеряет мощность?

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

Другая сторона спросила, каков принцип RDB?

Можно дать два слова, вилка и корова. fork означает, что redis выполняет операции RDB, создавая подпроцессы, а cow означаетcopy on write, После создания дочернего процесса родительский и дочерний процессы совместно используют сегмент данных, родительский процесс продолжает предоставлять услуги чтения и записи, а данные грязной страницы будут постепенно отделяться от дочернего процесса.

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

Каковы преимущества Pipeline и зачем использовать Pipeline?

Можно сократить время нескольких циклов ввода-вывода до одного при условии, чтоpipelineПричинно-следственной связи между выполненными инструкциями нет. использоватьredis-benchmarkПри выполнении измерения давления можно обнаружить, что важным фактором, влияющим на пик QPS redis, являетсяpipelineКоличество пакетных инструкций.

Вы понимаете механизм синхронизации Redis?

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

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

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

Redis ClusterСосредоточившись на масштабируемости, когда одной памяти redis недостаточно, используйте Cluster для сегментированного хранилища.

Интервью окончено

Молодой человек, можно, когда успеете прийти на работу, или завтра придете?

Ты делаешь вид, что спокоен, я так тороплюсь, мне еще нужно снять дом, или в следующий понедельник.

Ладно, интересно, этот пацан настолько НБ, что у него на руках куча предложений, если нет, то я должен попросить hr добавить ему денег.

Если вы сможете продержаться до конца, вы не сможете не сделать себе комплимент!

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

Суммировать

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

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

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

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

Благодарность

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

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

Обратите внимание, не потеряйтесь

Хорошо всем, это все содержание этой статьи. Люди, которые могут видеть это здесь, всеталант.

Каждую неделю я буду обновлять несколько статей, связанных с интервью и общими технологическими стеками ведущих интернет-компаний, большое спасиботалантМы можем видеть здесь, если эта статья хорошо написана, я думаю, что «Ао Бин» ячто-тоеслиПожалуйста, лайкните 👍 Пожалуйста, следите за ❤️ поделитесь пожалуйста 👥Это правда для меняочень полезно! ! !

Проституция нехороша, творить нелегко,Ваша поддержка и признание — самая большая мотивация для моего творчества, увидимся в следующей статье!

Ао Бин | Текст [Оригинал]

Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится!


Статья постоянно обновляется каждую неделю, вы можете искать в WeChat "Третий принц Ао Бин"Читать и запрашивать обновления в первый раз (на одну-две статьи раньше, чем в блоге), эту статьюGitHub github.com/JavaFamilyОн был включен, есть карта разума точек интервью заводов первого уровня, а также я организовал много своих документов. Добро пожаловать в Звезду и совершенствуйтесь. Каждый может обратиться в тестовый центр для ознакомления. Надеюсь мы можем иметь что-то вместе.