Будьте простой программой, делитесь галантерейными товарами и говорите о жизни.
Публичный аккаунт WeChat:Расширенная внутренняя архитектура
Следуйте за мной, чтобы найти больше галантерейных товаров, микросервисов, исходного кода Spring, JVM, SpringCloud Alibaba, K8S и т. д.
Резюме исторических статей: включая Netty, исходный код, параллелизм, JVM и т. д.
Сегодня я в основном делюсь некоторым содержанием интервью Redis, которое распространено в интервью. Если он вам просто нужен, вы можете просмотреть его для себя. Если он вам не нужен, вы можете сохранить его и просмотреть позже, когда он вам понадобится.
1. Предпосылки
Интервьюер: Используете ли вы распределенные блокировки в своем проекте?
Я: пользуюсь.
Интервьюер: Для чего вы в основном используете распределенные блокировки?
Я: Когда несколько узлов одновременно обращаются к одним и тем же данным, предотвратите грязные данные.
Интервьюер: Какие существуют решения для реализации распределенных блокировок? Какой из них вы используете?
Я: Существуют схемы для временных последовательных узлов на основе zk, setnx для redis и схемы для указания времени истечения времени ожидания.
Интервьюер: Какой программой вы пользуетесь?
Я: Я использую Redisson, упакованный компонент Redis.
Интервьюер: Какой режим кластера вы используете для Redis?
Я: Я использую кластерный режим Redis.
Интервьюер: Какие режимы может настроить Redisson?
Я: режим одного узла, кластерный режим, дозорный режим
Интервьюер: Как настраивается время ожидания распределенных блокировок?
Я: Этот тайм-аут нужно протестировать по бизнес-сценарию и затем оценить по результатам опрессовки, причем результаты опрессовки немного увеличить в 1-2 раза.
Интервьюер: Если время ожидания, установленное распределенной блокировкой, равно 2 с, но блокировка не была выполнена в течение 2 с, блокировка автоматически снимается, как с этим быть?
Я: Это, я не могу вспомнить.
Интервьюер: Хорошо. Что делать, если в режиме кластера вашего кластера Redis мастер зависает?
Я: Мы находимся в режиме кластера с тремя мастерами и тремя слейвами.Если более половины мастер-узлов связываются с неисправным мастер-узлом, считается, что текущий мастер-узел зависает, и подчиненный ниже мастера станет владелец. Если под мастером нет ведомого, кластер войдет в состояние отказа. Подчиненный узел является резервной копией главного узла.
Интервьюер: В Redis существует несколько механизмов сохранения, каковы преимущества и недостатки каждого из них?
Я: Постоянство Redis делится на: RDB и AOF, один — моментальный снимок, а другой — добавление. В случае моментального снимка данные резервируются на определенный период времени.Кроме того, пока есть инструкция для выполнения, информация об инструкции записывается. Данные можно восстановить позже в соответствии с инструкциями.
Если зависает режим моментального снимка, велика вероятность, что данные будут потеряны во время снапшота.Преимущество в том, что восстановление данных происходит быстрее, а в случае зеркалирования восстановление будет медленнее.
Интервьюер: Так как вы его используете?
Я: Мы используем оба, регулярно делаем резервные копии данных. После зависания удобно и быстро восстанавливаться при обеспечении сохранности данных.
Это действительно разбить запеканку и задать до конца, братья Джимей, смертельную серию из 18 вопросов.
Но один код есть один код, он все равно напоминает мне много знаний. Подводя итог, кстати, в следующий раз, когда вы столкнетесь с этой проблемой, вы не сможете ничего сказать.
Далее поговорим о ситуации, при которой Redisson не завершил выполнение дела по таймауту блокировки.
2. Механизм контроля тайм-аута блокировки Redisson
Цель Redisson — способствовать разделению ответственности пользователей за Redis, чтобы пользователи могли больше сосредоточиться на обработке бизнес-логики.
Сначала перейдите по адресу Github, китайский документ, вор 6.
Документация Redisson на китайском языкеGitHub.com/Редис сын/Горячие…
Далее основной анализ: если время блокировки истекло, а нить не выполнила задачу, что делать?
Reentrant Lock
Распределенная реентерабельная блокировка Redisson RLock Java-объект на основе Redis реализует интерфейс java.util.concurrent.locks.Lock. Он также предоставляет асинхронный (Async), отражающий (Reactive) и стандартный интерфейс RxJava2.
RLock lock = redisson.getLock("anyLock");
//最常见的使用方法
lock.lock();
Всем известно, что если узел Redisson, отвечающий за хранение распределенной блокировки, выходит из строя, и блокировка оказывается заблокированной, блокировка будет заблокирована.
Чтобы этого не произошло, Redisson предоставляет сторожевой таймер, который контролирует блокировку внутри, и его функция заключается в постоянном продлении срока действия блокировки до закрытия экземпляра Redisson.
По умолчанию время ожидания блокировки проверки сторожевого устройства составляет 30 секунд.
Его также можно указать иначе, изменив Config.lockWatchdogTimeout.
Кроме того, Redisson также предоставляет параметр LeaseTime, чтобы указать время блокировки с помощью метода блокировки. По истечении этого времени блокировка автоматически снимается.
// 加锁以后10秒钟自动解锁
// 无需调用unlock方法手动解锁
lock.lock(10, TimeUnit.SECONDS);
// 尝试加锁,最多等待100秒,上锁以后10秒自动解锁
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {
try {
...
} finally {
lock.unlock();
}
}
расширять:
Redisson также предоставляет методы, связанные с асинхронным выполнением для распределенных блокировок:
RLock lock = redisson.getLock("anyLock");
lock.lockAsync();
lock.lockAsync(10, TimeUnit.SECONDS);
Future<Boolean> res = lock.tryLockAsync(100, 10, TimeUnit.SECONDS);
Объекты RLock полностью соответствуют спецификации Java Lock. То есть разблокировать можно только процесс с блокировкой, а остальные процессы будут кидатьIllegalMonitorStateExceptionОшибка. Но если вам нужно разблокировать другие процессы, используйте распределенный семафор.Semaphoreобъект.
Суммировать
Выше приведено резюме и обмен сегодняшним контентом, спасибокак,обрати внимание наисобирать!
Публичный аккаунт WeChat:Расширенная внутренняя архитектура
Будут еще статьи, не забудьте поставить мне 👍, если вам это нравится, спасибо за вашу поддержку!
Статья в паблике обновляется синхронно! Следуй за мной, не теряйся!