Чем больше вы знаете, тем больше вы не знаете
Ставьте лайки и смотрите снова, формируйте привычку
GitHubоткрытый источникgithub.com/JavaFamily, есть карта мозга интервью на большой фабрике первой линии, добро пожаловать в звезду и улучшайте
болтовня
Поскольку последний выпуск был завершен в условиях позднего ночлега на Double Eleven, я чувствовал, что качество явно не такое хорошее, как раньше.Я буду работать сверхурочно и готов компенсировать всем некоторые галантереи, если я не высплюсь. . (в этот раз слишком легко ложиться спать поздно, чтобы простудиться)поставить лайкОстановить проституцию! )
Прохождение упоминать о рот, я пишу то, что я собираюсь нарисовать карту разума, будущее каждого не всегда положить большую карту вора, чтобы открыть для моегоGitHub, все желающие могут улучшить иStar.
Сначала я выпущу это для всеобщего обозрения, но оно все еще кажется немного бессмысленным, и я подожду, пока все его улучшат.
оглядываться
В прошлом выпуске серии «Висячие» мы упоминалиRedisДля некоторых связанных знаний те, кто не видел его, могут просмотреть его.
- Серия «Повесить интервьюера» — основы Redis
- Серия "Повесить интервьюера" - Лавина тайников, Разрушение, Проникновение
- Серия "Висячий интервьюер" - Redis Sentinel, Persistence, Master-Slave, Tear LRU
- Серия «Повешение интервьюера» — Последняя глава Redis — Зима близко, FPX — Вознесение нового короля
В этом выпуске я расскажу о некоторых частых проблемах с кешем, некоторые из которых я уже упоминал ранее, но большинство из них, возможно, вижу впервые, поэтому повторюсь.
Кэшировать очки знаний
Какие типы кэшей существуют?
Кэширование является эффективным средством повышения производительности оперативного доступа к данным в сценариях с высокой степенью параллелизма и часто используется при разработке проектов.
Типы кеша делятся на:локальный кеш,Распределенный кешимногоуровневый кэш.
Локальный кеш:
локальный кешОн кэшируется в памяти процесса, такого как нашJVMкуча, вы можете использоватьLRUMapчтобы достичь этого, вы также можете использоватьEhcacheтакой инструмент.
Локальный кеш — это доступ к памяти, он не требует дополнительных затрат на удаленное взаимодействие и имеет наилучшую производительность, но ограничен емкостью одной машины, а кеш, как правило, мал и не может быть расширен.
Распределенный кеш:
Распределенный кешЭту проблему можно решить очень хорошо.
Распределенные кэши обычно обладают хорошей горизонтальной масштабируемостью и могут обрабатывать сценарии с большими объемами данных. Недостатком является то, что требуются удаленные запросы, а производительность не так хороша, как при локальном кэшировании.
Многоуровневый кеш:
Чтобы сбалансировать эту ситуацию, фактический бизнес обычно принимаетмногоуровневый кэш, в локальном кеше сохраняются только некоторые данные горячих точек с наибольшей частотой доступа, а остальные данные горячих точек помещаются в распределенный кеш.
В современных производителях первого уровня это также наиболее часто используемое решение для кэширования.Единственное решение для кэширования часто трудно поддерживать множество сценариев с высокой степенью параллелизма.
стратегия устранения
Будь то локальный кеш или распределенный кэш, чтобы обеспечить более высокую производительность, данные используются для сохранения данных. Из-за пределов стоимости и памяти, когда хранимые данные превышают емкость кэша, необходимо удалить данные кэша.
Общая стратегия выбраковки такова.FIFOУдалите самые старые данные,LRUИсключите наименее недавно использованные, иLFUСуществует несколько стратегий исключения данных с наименее часто используемой частотой.
noeviction: возвращает ошибку, когда достигается предел памяти и клиент пытается выполнить команду, которая будет использовать больше памяти (большинство команд записи, но DEL и несколько исключений)
allkeys-lru: попытка восстановить наименее используемый ключ (LRU), чтобы освободить место для вновь добавленных данных.
volatile-lru: попытка перезапустить наименее используемый ключ (LRU), но только для ключей в наборе с истекшим сроком действия, чтобы у вновь добавленных данных было место для хранения.
allkeys-random: повторно использовать случайные ключи, чтобы освободить место для вновь добавленных данных.
volatile-random: перерабатывать случайные ключи, чтобы освободить место для вновь добавленных данных, но только для ключей в наборах с истекшим сроком действия.
-
volatile-ttl: перерабатывать ключи в наборе с истекшим сроком действия и отдавать приоритет ключам с более коротким временем жизни (TTL), чтобы у вновь добавленных данных было место для хранения.
Если ни один из ключей не удовлетворяет предварительным условиям для повторного использования, политикаvolatile-lru, volatile-randomа такжеvolatile-ttlТак же, как невыселение.
На самом деле все знакомы сLinkedHashMapАлгоритм Lru также реализован в реализации следующим образом:
Когда емкость превысит 100, начните выполнениеLRUСтратегия: ставить наименее недавно неиспользованныеTimeoutInfoHolderобъектevictТерять.
В реальном интервью вас попросят написать алгоритм LUR.Не делайте оригинальный.ТМ так много, что вы не можете их дописать.Вы можете либо бороться с вышеперечисленными, либо со следующими, и найти структуру данных для реализации версии LRU для Java. Это проще, если вы знаете, что происходит.
Memcache
Обратите внимание, что позжеMemcacheОбозначается как МС.
Давайте посмотрим на характеристики MC:
- MC использует многопоточный асинхронный ввод-вывод при обработке запросов, что позволяет разумно использовать преимущества многоядерности ЦП, а производительность очень хорошая;
- MC имеет простые функции и использует память для хранения данных;
- Я не буду вдаваться в подробности о структуре памяти и обызвествлении ТК, вы можете сами ознакомиться с этим.Официальный сайтпонимать;
- MC может установить дату истечения срока действия кэшированных данных, и данные с истекшим сроком действия будут удалены;
- Стратегия сбоя использует отложенный сбой, то есть проверку того, является ли сбой недействительным при повторном использовании данных;
- Когда емкость будет заполнена, данные в кеше будут удалены.Помимо очистки ключей с истекшим сроком действия, данные также будут удалены в соответствии со стратегией LRU.
Кроме того, существуют некоторые ограничения на использование MC, которые являются фатальными в текущей интернет-сцене и становятся выбором каждого.Redis,MongoDBВажные причины:
- ключ не может превышать 250 байт;
- значение не может превышать 1М байт;
- Максимальный срок действия ключа — 30 дней;
- Поддерживает только структуру K-V, не обеспечивает постоянства и функций синхронизации master-slave.
Redis
Позвольте мне кратко сказатьRedisОсобенности, легко сравнить с MC.
- В отличие от MC, Redis обрабатывает запросы в однопоточном режиме. Этому есть две причины: одна — использование неблокирующего механизма асинхронной обработки событий; вторая — кэшированные данные — это все операции с памятью, и время ввода-вывода не будет слишком большим, а один поток может избежать затрат. переключения контекста потока.
- RedisПоддерживается персистентность, поэтому Redis можно использовать не только как кеш, но и как базу данных NoSQL.
- По сравнению с МС,RedisТак же есть очень большой плюс, то есть кроме К-В поддерживает еще и множество форматов данных, таких как список, набор, отсортированный набор, хеш и т.д.
- RedisОбеспечивает механизм синхронизации ведущий-ведомый иClusterВозможность развертывания кластера, способного предоставлять услуги с высокой доступностью.
Подробно объясните Redis
Структура точек знаний Redis показана на следующем рисунке.
Функции
приходите посмотретьRedisКакие функции предусмотрены?
Сначала рассмотрим базовый тип:
Нить:
StringтипRedisНаиболее часто используемый тип в , внутренняя реализация черезSDS(Простая динамическая строка) для хранения. СДС похож наJavaсерединаArrayList, вы можете уменьшить частое выделение памяти, предварительно выделив избыточное пространство.
Это самый простой тип, который представляет собой обычный набор и получение, и выполняет простой кэш KV.
Однако в реальной среде развития многие дети могут преобразовать множество сложных структур в унифицированные.StringДля хранения и использования, например, некоторые дети любят хранить предметы илиListпреобразовать вJSONStringСохраните его, выньте и выполните последовательность в обратном порядке.
Я не буду обсуждать правильность или неправильность этого здесь, но я все же надеюсь, что каждый может использовать наиболее подходящую структуру данных в наиболее подходящем сценарии.Объект не может найти наиболее подходящую, но можно выбрать наиболее подходящий тип, а затем другие возьмут на себя Ваш код выглядит такСпецификацияО, пареньчто-тоДа, я вижу, ты используешь всеString,Мусор!
Ну, это все отступления, я все-таки надеюсь, что ты сохранишь истину в своем сердце, и привычки станут естественными, а маленькие привычки сделают тебя.
StringПрактические сценарии применения относительно широки:
Кэш-функция: СтрокаСтроки являются наиболее часто используемым типом данных, а не толькоRedis, каждый язык является самым основным типом, поэтому использованиеRedisВ качестве кэша с другими базами данных в качестве уровня хранения используйтеRedisПоддержка характеристик высокого параллелизма может значительно повысить скорость чтения и записи в системе и снизить нагрузку на серверную базу данных.
прилавок:Многие системы используютRedisКак счетчик системы в реальном времени, он может быстро реализовать функции подсчета и запроса. И окончательные результаты данных могут быть сохранены в базе данных или другом носителе для постоянного хранения в соответствии с определенным временем.
Общий сеанс пользователя:Пользователь снова обновляет интерфейс, и ему может потребоваться доступ к данным для повторного входа в систему или доступ к кешу страниц.Cookie, но можно использоватьRedisпользователяSessionЦентрализованное управление, в этом режиме необходимо только обеспечитьRedisвысокая доступность на пользователяSessionОбновления и приобретения могут быть сделаны быстро. Значительно повысить эффективность.
Хэш:
это похожеMapСтруктура , это обычно структурированные данные, такие как объект (при условииЭтот объект не вложен в другие объекты) для кэшированияRedisВ, а затем каждый раз, когда вы читаете и записываете кеш, вы можете работатьHashвнутреннийполе.
Но эта сцена на самом деле более-менее простая, потому что многие объекты теперь стали сложнее, например, ваш товарный объект может содержать много атрибутов, в том числе и объекты. Сцены, которые я использую сам, не используют так много.
Список:
ListЭто упорядоченный список, и он все еще может сыграть много трюков.
Например, поListХраните некоторые структуры данных типа списка, такие как список поклонников, список комментариев к статьям и тому подобное.
Например, поlrangeкоманда для чтения элементов в замкнутом интервале, которая может быть основана наListРеализовать поисковый запрос, это отличная функция, основанная наRedisЧтобы добиться простого высокопроизводительного пейджинга, вы можете делать такие вещи, как Weibo, которые вытягивают вниз и постоянно разбивают страницы.
Например, вы можете создать простую очередь сообщений изListголову, изListПолучите это там.
ListЭто структура данных, которая обычно используется в процессе разработки, не говоря уже о горячих данных.
Очередь сообщений: RedisСтруктура связанного списка может легко реализовать блокирующие очереди и может использовать команды ввода и вывода для завершения проектирования очереди. Например: производитель данных может передатьLpushкоманда для вставки данных слева, несколько потребителей данных, вы можете использоватьBRpopКоманда блокирует данные в конце списка захвата.
-
Применение отображения списка статей или данных постраничного просмотра.
Например, список статей нашего часто используемого веб-сайта блога, когда количество пользователей увеличивается, и у каждого пользователя есть свой список статей, и когда статей много, их нужно отображать в разбиении на страницы, тогда вы можете рассмотреть возможность использованияRedisСписок не только упорядочен, но и поддерживает получение элементов в соответствии с диапазоном, что может отлично решить функцию запроса пейджинга. Значительно повысить эффективность запросов.
Набор:
SetЭто неупорядоченная коллекция, которая автоматически дедуплицируется.
непосредственно на основеSetДобавьте данные, которые необходимо дедуплицировать в систему, и они будут дедуплицированы автоматически.Если вам нужно быстро дедуплицировать некоторые данные глобально, вы, конечно, также можетеJVMв памятиHashSetДедупликация, но что, если у вас есть система, развернутая на нескольких машинах? должно быть основано наRedisсделать глобальныйSetИди потяжелее.
может основываться наSetВоспроизведите операции пересечения, объединения и различия, такие как пересечение, мы можем сделать полное пересечение списков друзей двух людей и посмотреть, кто из них является общим другом? Правильно.
Во всяком случае, таких сценариев больше, потому что сравнение быстрое, а операция простая, два запроса одинSetСделай это.
Сортированный набор:
Sorted setсортируетсяSet, удалять дубликаты, но можно сортировать, давать оценку при записи и автоматически сортировать в соответствии с оценкой.
Сценарии использования отсортированных наборов аналогичны наборам, но наборы наборов не сортируются автоматически, иSorted setВы можете использовать баллы для сортировки среди членов, и они сортируются при вставке. Поэтому, когда вам нужен упорядоченный и неповторяющийся список наборов, вы можете выбратьSorted setСтруктуры данных как опции.
Таблица лидеров: упорядоченный набор классических сценариев использования. Например, видео-сайт должен ранжировать видео, загруженные пользователями, и поддержание ранжирования может осуществляться по многим аспектам: по времени, по количеству просмотров, по количеству полученных лайков и т. д. .
-
использоватьSorted SetsНапример, чтобы создать взвешенную очередь, оценка обычных сообщений равна 1, а оценка важных сообщений — 2, а затем рабочий поток может выбрать получение рабочих задач в порядке, обратном оценке. Ставьте приоритеты перед важными задачами.
Горячий список поиска Weibo, то есть сзади есть горячее значение, а впереди название
Расширенное использование:
Bitmap :
Bitmap поддерживает хранение информации в битах, что может быть использовано для реализацииФильтр Блума (BloomFilter);
HyperLogLog:
Обеспечивает неточную функцию подсчета дедупликации, которая больше подходит для статистики дедупликации крупномасштабных данных, таких как статистический UV;
Geospatial:
Его можно использовать для сохранения географического местоположения и расчета расстояния до местоположения или расчета местоположения в соответствии с радиусом. Вы когда-нибудь задумывались об использовании Redis для реализации людей поблизости? Или рассчитать оптимальный путь карты?
Эти три фактически можно рассматривать как структуру данных. Я не знаю, сколько друзей помнят. Я упоминал об этом в основах Redis, где началась мечта. Если вы знаете только пять основных типов, вы можете получить только 60 баллов. Если вы можете говорить на продвинутом уровне, а потом думать, что тычто-то.
паб/саб:
Функция представляет собой функцию публикации подписки, которую можно использовать как простую очередь сообщений.
Трубопровод:
Группа инструкций может выполняться пакетами, и все результаты могут быть возвращены за один раз, что может уменьшить частые ответы на запросы.
Луа:
Redisподдержка представленияLuaСкрипт для выполнения ряда функций.
Когда я работал в бывшей компании, занимающейся электронной коммерцией, я часто использовал эту штуку на сцене seckill.Это немного ароматно, чтобы быть разумным, и оно использует свою атомарность.
Кстати, хотите увидеть дизайн шипа? Я помню, что, кажется, каждый раз, когда я беру интервью, я спрашиваю, я хочу видеть это непосредственнокакПишите комментарии, чтобы убить его.
Сделка:
Последняя функция — транзакции, ноRedisпри условии, что это не является строго транзакционным,RedisГарантируется только последовательное выполнение команд, и гарантируются все исполнения, но при сбое выполнения команды она не будет откатываться, а будет продолжать выполняться.
Упорство
RedisПредоставляет два метода сохранения: RDB и AOF. RDB записывает набор данных из памяти на диск в виде моментальных снимков. Фактическая операция выполняется подпроцессами разветвления, которые хранятся в двоичном сжатии; AOF записывается в виде текста бревноRedisОбрабатывает каждую операцию записи или удаления.
RDBСохранение всех данных Redis в одном файле больше подходит для аварийного восстановления, но недостатком является то, что если снапшот не работает до завершения сохранения, данные за этот период будут потеряны, а сохранение снэпшота может привести к тому, что сервис быть недоступным в течение короткого времени.
AOFРежим добавления, используемый для операции записи в файл журнала, имеет гибкую стратегию синхронизации и поддерживает синхронизацию в секунду, синхронизацию на изменение и отсутствие синхронизации. Недостаток заключается в том, что для одного и того же масштаба наборов данных AOF больше, чем RDB. быть медленнее, чем RDB.
Для получения подробной информации перейдите к главе о высокой доступности, особенно о преимуществах и недостатках этих двух и о том, как выбрать.
Серия "Висячий интервьюер" - Redis Sentinel, Persistence, Master-Slave, Tear LRU
Высокая доступность
Давайте посмотрим на высокую доступность Redis. Redis поддерживает синхронизацию master-slave, обеспечивает режим развертывания кластера Cluster и отслеживает состояние главного сервера Redis через Sentinel. Когда мастер кладет трубку, в ведомом узле выбирается новый мастер в соответствии с определенной стратегией, а другие ведомые подстраиваются под нового мастера.
Короче говоря, есть три стратегии выбора лидера:
- Чем ниже установлен приоритет ведомого, тем выше приоритет;
- При тех же обстоятельствах, чем больше данных реплицируется ведомым устройством, тем выше его приоритет;
- При тех же условиях, чем меньше рунид, тем легче его подобрать.
В кластере Redis Sentinel также будет развернут с несколькими экземплярами, и Sentinels используют протокол RAFT для обеспечения их высокой доступности.
Redis Cluster использует механизм шардирования, который внутренне разделен на 16384 слота, которые распределены по всем мастер-нодам, и каждый мастер-нода отвечает за часть слота. Во время операции с данными выполните CRC16 в соответствии с ключом, чтобы вычислить, какой слот и какой мастер будет его обрабатывать. Избыточность данных гарантируется подчиненными узлами.
часовой
Sentinels должны использовать три экземпляра для обеспечения их надежности: Sentinel + master-slave иНет гарантии, что данные не будут потеряны, но кластерВысокая доступность.
Зачем нужны три экземпляра? Давайте сначала посмотрим, как будут выглядеть два Стража.
Мастер не работает. Пока один из двух часовых, s1 и s2, думает, что вы не работаете, они переключатся, и часовой будет выбран для выполнения сбоя, но в это время большинство часовых должны работать .
Так в чем проблема? M1 не работает, S1 не работает, все в порядке, но вся машина не работает? У дозорного остались только голые члены S2, и нет дозорного, чтобы разрешить отказоустойчивость.Хотя на другой машине есть R1, отказоустойчивость не выполняется.
Классический кластер Sentinel выглядит так:
Машина, на которой находится M1, не работает, а часовых два, и если два человека видят, что он не работает, то мы должны выбрать одного для выполнения аварийного переключения.
Теплый человек, кратко резюмирую основные функции дозорного компонента:
- Мониторинг кластера: Ответственный за мониторинг, правильно ли работают основные процессы Redis Master и Slave.
- Уведомление о сообщении: еслиRedisЕсли экземпляр неисправен, Sentinel отвечает за отправку сообщения в качестве уведомления о тревоге администратору.
- Аварийное переключение: если главный узел выходит из строя, он автоматически переходит на подчиненный узел.
- Центр конфигурации: если произойдет отработка отказа, уведомите клиента о новом главном адресе клиента.
Мастер-раб
Когда дело доходит до этого, как и в случае с сохранением данных, о котором я упоминал ранее,RDBиAOFимеют относительно близкие отношения.
Позвольте мне сначала рассказать о том, почему мы используем режим архитектуры master-slave Я упоминал об одной машине ранее.QPSограничено, иRedisХарактерной чертой является то, что он должен поддерживать высокий параллелизм чтения, тогда вы можете читать и писать на одной машине.Кто может это выдержать?, не человек! Но если позволить мастер-машине писать, синхронизировать данные с другими ведомыми машинами, а они все читают и раздают большое количество запросов, не будет ли намного лучше, а горизонтальное расширение можно легко добиться при расширении мощностей.
Когда вы запускаете подчиненное устройство, оно отправляетpsyncКоманда мастеру, если подчиненное устройство подключается к мастеру впервые, это вызовет полную репликацию. Мастер запустит поток для генерацииRDBСнапшоты также кэшируют новые запросы на запись в памяти,RDBПосле создания файла мастерRDBОтправлено подчиненному устройству, первое, что делает подчиненное устройство после его получения, — это записывает его на локальный диск, затем загружает в память, а затем мастер отправляет новые имена, кэшированные в памяти, подчиненному устройству.
После того, как я опубликовал его, пользователь сети из CSDN: Jian_Shen_Zer задал вопрос:
Когда ведущий-ведомый синхронизирован, новый ведомый используется, когда приходит новый ведомый.RDB, а что с данными после этого? Когда новые данные поступают на ведущее устройство, как их можно синхронизировать с ведомым устройством?
Ао Бин ответил: «Глупый,AOFНу, постепенный вродеMySQLизBinlogТо же самое, только синхронизировать инкремент лога с подчиненным сервисом.
механизм аннулирования ключа
RedisКлюч может установить время истечения срока действия.По истечении срока действия Redis использует комбинацию активных и пассивных механизмов отказа.Один из них заключается в инициировании пассивного удаления во время доступа, такого как MC, а другой – в регулярном активном удалении.
Периодический + ленивый + вывод памяти на пенсию
Часто задаваемые вопросы о кеше
Метод обновления кеша
Это следует учитывать при принятии решения об использовании кэширования.
Кэшированные данные необходимо обновлять при изменении источника данных, который может быть БД или удаленным сервисом. Способ обновления может быть активным обновлением. Когда источником данных является БД, кеш можно обновить сразу после обновления БД.
Когда источником данных является не БД, а другие удаленные сервисы, он может быть не в состоянии активно воспринимать изменения данных во времени.В этом случае обычно выбирается установить срок действия для кэшированных данных, то есть максимальный допуск время для несогласованности данных.
В этом случае вы можете сделать обновление недействительным.Если ключ не существует или недействителен, сначала запросите источник данных для получения последних данных, затем снова кэшируйте его и обновите дату истечения срока действия.
Но с этим есть проблема: если зависимая удаленная служба не сможет обновиться, это приведет к недоступности данных. Способ улучшения — обновлять асинхронно, то есть не очищать данные при сбое, продолжать использовать старые данные, а затем выполнять задачу обновления асинхронным потоком. Это позволяет избежать периода пустого окна в момент сбоя. Кроме того, существует чисто асинхронный метод обновления, который периодически обновляет данные пакетами. В реальных условиях метод обновления можно выбрать в соответствии с бизнес-сценарием.
несогласованность данных
Вторая проблема — это проблема несогласованности данных, можно сказать, что пока используется кеш, необходимо подумать, как справиться с этой проблемой. Причиной несогласованности кеша, как правило, является сбой активного обновления, например, после обновления БД обновлениеRedisВремя ожидания запроса истекло из-за проблем с сетью или сбой асинхронного обновления.
Решение состоит в том, чтобы увеличить число повторных попыток, если служба не особенно чувствительна ко времени; если служба чувствительна ко времени, можно использовать асинхронные задачи компенсации для обработки неудачных обновлений или краткосрочная несогласованность данных не повлияет на бизнес, тогда как долго как следующее обновление. Оно может быть успешным, если оно может гарантировать возможную согласованность.
проникновение в кеш
проникновение в кеш. Причиной этой проблемы может быть внешняя злонамеренная атака, например, информация о пользователе кэшируется, но злоумышленники часто запрашивают интерфейс с несуществующим идентификатором пользователя, что приводит к промаху кеша запросов, а затем проникновение в БД запрос все равно промахивается . В это время в кеш будет проникать большое количество запросов на доступ к БД.
Решение заключается в следующем.
- Для несуществующих пользователей сохраните пустой объект в кеше, чтобы пометить его, чтобы предотвратить повторный доступ к БД с тем же идентификатором. Однако иногда этот метод не очень хорошо решает проблему и может привести к сохранению большого количества бесполезных данных в кэше.
- использоватьBloomFilterФильтр, BloomFilter характеризуется обнаружением существования, если BloomFilter не существует, то и данные не должны существовать, если BloomFilter существует, фактических данных также может не быть. Очень подходит для решения такого рода задач.
разбивка кеша
разбивка кеша, то есть при сбое данных хотспота к источнику данных будет проникать большое количество запросов на эти данные.
Существуют следующие способы решения этой проблемы.
- Блокировки взаимного исключения могут использоваться для обновления, чтобы гарантировать, что одни и те же данные в одном и том же процессе не будут одновременно запрашиваться в БД, что снижает нагрузку на БД.
- Используйте метод случайной отсрочки, случайным образом засыпайте на короткое время в случае сбоя, снова запрашивайте и выполняйте обновление в случае сбоя.
- Для решения проблемы одновременного отказа нескольких горячих клавиш вы можете использовать фиксированное время плюс небольшое случайное число в кеше, чтобы избежать одновременного отказа большого количества горячих клавиш.
Кэш Лавина
Кэш Лавина, причина в том, что кеш зависает, и все запросы в это время будут проникать в БД.
Решение:
- Используйте стратегию быстрого отказа предохранителя, чтобы уменьшить мгновенное давление DB;
- Используйте режим ведущий-ведомый и режим кластера, чтобы обеспечить максимальную доступность служб кэширования.
В практических сценариях эти два метода используются в комбинации.
Старые друзья знают, почему яБез большого вступленияЭто несколько моментов, я слишком подробно расписал в предыдущей статье, ничего не могу с собой поделатькакТакие, я не буду делать повторные копии здесь.
- Серия «Повесить интервьюера» — основы Redis
- Серия "Повесить интервьюера" - Лавина тайников, Разрушение, Проникновение
- Серия "Висячий интервьюер" - Redis Sentinel, Persistence, Master-Slave, Tear LRU
- Серия «Повесить интервьюера» — Заключительная глава RedisЗима близко, FPXновый король восходит на престол
Тестовые очки и бонусные предметы
Записывать!
испытательный центр
Когда вас спрашивают о кеше во время интервью, в основном это делается для того, чтобы изучить понимание характеристик кеша.MC,Redisособенности и использование.
- Знать сценарии использования кешей, как используются разные типы кешей, например:
- Кэширование горячих данных БД для снижения нагрузки на БД, кэширование зависимых сервисов для повышения параллельной производительности;
- Можно использовать простые сценарии кэша K-V.MC, и необходимо кэшировать специальные форматы данных, такие как список и набор, вы можете использоватьRedis;
- Можно использовать кеширование списка недавно воспроизведенных видео пользователя.Redisсписок для сохранения и необходимо рассчитать данные таблицы лидеров, вы можете использоватьRediszset структура для сохранения.
Чтобы понять МС иRedisобщие команды, такие как атомарные увеличения и уменьшения, команды, которые работают с различными структурами данных и т. д.
Узнайте о МС иRedisСтруктура хранилища в памяти, которая может быть полезна для оценки емкости использования.
Узнайте о МС иRedisметоды аннулирования данных и стратегии отбраковки, такие как активно инициируемая периодическая отбраковка и пассивно инициируемая отложенная отбраковка
понятьRedisпостоянство, синхронизация master-slave иClusterпринципы развертывания, такие какRDBиAOFреализация и отличия.
Вы должны знать сходства и различия между проникновением в кеш, поломкой и лавиной, а также решения.
Независимо от того, есть ли у вас опыт электронной коммерции или нет, я думаю, вы должны знать конкретную реализацию и детали спайков.
-
……..
Добро пожаловать вGitHubПополнить
бонус
Если вы хотите лучше пройти собеседование, вы также должны знать следующие бонусы.
Это введение использования кэша в сочетании с практическими сценариями применения. Например, при вызове внутреннего интерфейса службы для получения информации вы можете использовать локальный + удаленный многоуровневый кеш; для сценариев динамической таблицы лидеров вы можете рассмотреть возможность использованияRedisизSorted setдобиться и так далее.
Лучше всего, если у вас есть опыт проектирования и использования распределенного кэша, например, какие сценарии использовались в проекте.Redis, какая структура данных используется, и какая проблема решена; при использовании MC она регулируется в соответствии с предполагаемым значениемMcSlabзадать параметры и т. д.
Хорошо понимать проблемы, которые могут возникнуть при использовании кеша. НапримерRedisЭто однопоточный запрос на обработку, и следует по возможности избегать задачи с одним запросом, требующей больших затрат времени, чтобы предотвратить взаимное влияние;RedisСледует избегать развертывания служб на одном компьютере с другими процессами, интенсивно использующими ЦП, или отключать подкачку памяти подкачки, чтобы предотвратитьRedisКэшированные данные выгружаются на жесткий диск, что влияет на производительность. Другим примером является упомянутая выше проблема кальцификации ТК и так далее.
понятьRedisТипичные сценарии применения, например, с использованиемRedisреализовать распределенные блокировки; использоватьBitmapреализоватьBloomFilter,использоватьHyperLogLogдля УФ-статистики и многое другое.
Ознакомьтесь с новыми функциями Redis 4.0 и 5.0, такими как постоянная очередь сообщений Stream, которая поддерживает многоадресную рассылку, расширение пользовательских функций с помощью системы модулей и т. д.
……..
Еще раз добро пожаловать вGitHubПополнить.
Суммировать
на этот раз для меняRedisКраткое содержание сериала, это должно бытьRedisЭто последняя статья по теме. На самом деле, многие из друзей, прочитавших четыре статьи, изполупонятыйприбытьсбитый с толку, ха-ха, шучу.
Я думаю, что мой метод должен быть хорошим.Большинство моих друзей могут понять его лучше.Я не буду писать его после этой статьи.RedisЕсть статьи по теме (seckill посмотреть популярность, которую все хотят видеть), если у вас есть какие-либо вопросы, вы можете связаться со мной в WeChat,Что написать в следующей серии?
Не волнуйтесь, перед следующей серией я опубликую интересную статью.Это статья, которую я выиграл в конкурсе на креативность кода компании.Я думаю,что она все же лучше.что-то, не мог не поделиться, кстати, в том выпуске он был запущенголосованиеБар ха-ха.
Я видел, что многие друзья оставили комментарии о том, что они хотят увидеть другие вещи, они, вероятно, собрали это, и если вы еще не оставили сообщение, поторопитесь:
Наггетс
Ю Синь: Хотите познакомиться с основами компьютеров, сетями и операционными системами (говяжья селезёнка FPX)
ценить: Расскажите о вопросах интервью, с которыми часто сталкивается даббо, слишком много людей любят задавать даббо😃
Заметки по разработке архитектуры Java: Он действительно ароматный В следующем выпуске мы поговорим о Dubbbo (фокус SPI), а затем поговорим о MQ.
CSDN
Ваше высочество: Прочитав все статьи о Redis, я надеюсь, что смогу опубликовать ssm
Блог Парк
Ченг Ран: Даббо Даббо
Китай с открытым исходным кодом
linshi2019: Этот вопрос, очевидно, срочная работа.
Ао Бин: Я отвечу на это, подстегните меня, мне это очень нравится, но, честно говоря, я надеюсь, что всепониматьЗатем я три дня не спал допоздна на Double Eleven, и теперь я должен идти домой около 2 часов, когда пишу для вас.У меня должно быть фиксированное рабочее время для приема пищи в день.Если я хочу чтобы что-то написать, приходится выжимать время на сон.Выход точно не такой качественный, как от всей души писать на выходных.
На самом деле, друзья, которые смотрели первый выпуск, тоже должны знать, что я внабор текста,есть еще многокопирайтинг,с картинкамиНа самом деле, я его все время совершенствовал, мне приходится долго это делать только для того, чтобы выделить существительные, потому что я боюсь, что все увидят единый черно-белый тон и надоест.
Я действительно много работаю, и я надеюсь, что вы можете поддержать и понять.
Zhihu, Jianshu, Sifu, MOOC NotesНикто не знает, почему, но старый железный, который знает это, может сказать мне.
Я просто хочу сказать, что все, что вы хотите увидеть, должно быть в начале иGITHubВ той картинке, это не большая проблема, это будет написано позже.
Спасибо
Наконец, спасибо Чжан Лею, техническому эксперту Sina Weibo.
Он присоединился в 2013 годуСина Вейбо, в качестве основного специалиста, он участвовал во многих ключевых проектах, таких как Weibo как услуга и гибридное облако.RPCРамкаMotanТехнический директор, а также ответственный за WeiboService MeshИсследования и разработки и продвижение решения сосредоточены на направлении разработки высокодоступной архитектуры и сервисного промежуточного программного обеспечения.
он главныйMotanФреймворк ежедневно обрабатывает триллионы вызовов запросов и является краеугольным камнем сервис-ориентированной платформы Weibo.Каждое неожиданное горячее событие и каждый пик трафика Весеннего фестиваля неотделимы друг от друга.MotanПоддержка и защита рамы. Кроме того, он был приглашен наArchSummit, WOT, GIACТехнологический саммит для обмена технологиями.
Благодаря его поддержке и идеям, предоставленным некоторым экземпляром статьи.
Обратите внимание, не потеряйтесь
Хорошо всем, это все содержание этой статьи. Люди, которые могут видеть это здесь, всеталант.
Каждую неделю я буду обновлять несколько статей, связанных с интервью и общими технологическими стеками ведущих интернет-компаний, большое спасиботалантМы можем видеть здесь, если эта статья хорошо написана, я думаю, что «Ао Бин» ячто-тоеслиПожалуйста, лайкните 👍 Пожалуйста, следите за ❤️ поделитесь пожалуйста 👥Это правда для меняочень полезно! ! !
Проституция нехороша, творить нелегко,Ваша поддержка и признание — самая большая мотивация для моего творчества, увидимся в следующей статье!
Ао Бин | Текст [Оригинал]
Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится!
Статья постоянно обновляется каждую неделю, вы можете искать в WeChat "Третий принц Ао Бин"Читать и запрашивать обновления в первый раз (на одну-две статьи раньше, чем в блоге), эту статьюGitHub github.com/JavaFamilyОн был включен, есть ментальная карта точек интервью производителей первого уровня, а также я организовал много своих документов. Добро пожаловать в Звезду и совершенство. Вы можете обратиться в тестовый центр для ознакомления во время интервью. , Я надеюсь, что у нас есть что-то вместе.