предисловие
ПредыдущийИнтервьюер спросил меня, сталкивался ли я с какими-то ямами при использовании Dubbo? Я смеялся.Позже другой фанат сказал мне, что во время интервью его оскорбляли, так как этот фанат из предыдущей толстой династии**老粉丝
**, а в понедельник начнется новый раунд интервью.Чтобы отплатить ему за многолетнюю поддержку, я написал эту статью за одну ночь, надеясь помочь ему в следующем интервью.
сценарий реального случая
Правильная позиция распределенной блокировки Redis
По мнению Фей Чао, когда многие студенты используют распределенные блокировки, они напрямую используют поиск Baidu, чтобы найти класс инструментов распределенных блокировок Redis.Ключ в том, что этот класс инструментов по-прежнему полон многихSystem.out.println();
И т. д. На самом деле правильная поза распределенной блокировки Redis заключается в использованииredisson
Этот инструмент на стороне клиента. Конкретное введение может выполнять поиск по крупнейшему сайту однополых знакомств.github
.
как ответить
Прежде всего, если вы использовали распределенную блокировку Redis в правильной позе и читали соответствующие официальные документы, эта проблемаSo easy
. Посмотрим
Откровенно говоря, если вы хорошо владеете английским языком, возможно, лучше прочитать документ на английском языке.
By default lock watchdog timeout is 30 seconds and can be changed through Config.lockWatchdogTimeout setting.
Но если вы посмотрите на китайские документы
Период тайм-аута сторожевого таймера для проверки блокировки по умолчанию составляет 30 секунд.
Это предложение Fei Chao неоднозначно с лингвистической точки зрения и имеет два значения.
1. Сторожевой таймер по умолчанию составляет 30 секунд, чтобы проверить период ожидания блокировки.
2. Сторожевые таймеры проверят время ожидания блокировки, время блокировки по умолчанию составляет 30 секунд.
Увидев это, я надеюсь, что все не будут клеветать на моего учителя физкультуры начальных классов, хотя он и учитель языка один и тот же человек.
Анализ исходного кода
Мы написали самую простую демку на основе примера, приведенного в официальной документации, пример основан на скриншоте выше.Ctr+C和Ctr+V
Волна операций, как показано ниже
public class DemoMain {
public static void main(String[] args) throws Exception {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);
RLock lock = redisson.getLock("anyLock");
lock.lock();
//lock.unlock();
}
}
create
Отсюда мы знаем,internalLockLeaseTime
иlockWatchdogTimeout
Эти два параметра равны.
lockWatchdogTimeout
Значения по умолчанию следующие
public class Config {
private long lockWatchdogTimeout = 30 * 1000;
public long getLockWatchdogTimeout() {
return lockWatchdogTimeout;
}
//省略无关代码
}
отinternalLockLeaseTime
Из этого слова также видно, что время ожидания по умолчанию этой добавленной распределенной блокировки составляет 30 секунд.Но есть еще один вопрос, то есть сколько времени требуется, чтобы продлить срок действия этого сторожевого таймера?Посмотрим вниз
lock
Из места, обрамленного на моей картинке, мы знаем, что успешное приобретение замка откроет задание на время, то естьwatchdog
, запланированная задача будет регулярно проверяться для обновленияrenewExpirationAsync(threadId)
.
Здесь используется времяnetty-common
в упаковкеHashedWheelTimer
, официальный аккаунт Feichao установил тесные отношения сотрудничества с основными поисковыми системами, вам нужно только выполнить поиск этого класса в любой поисковой системе, вы можете узнать значение соответствующих параметров API.
Из рисунка мы понимаем, что разница во времени между каждым вызовом расписания составляетinternalLockLeaseTime / 3
.это 10 секунд.
Правда раскрыта
Благодаря анализу исходного кода мы знаем, что по умолчанию время блокировки составляет 30 секунд.Если заблокированное дело не будет завершено, то, когда 30-10 = 20 секунд, будет выполнено обновление, и блокировка будет сброшена до 30 секунд. В это время другой одноклассник может спросить, а что, если бизнес-машина выйдет из строя?Если она выйдет из строя, запланированное задание не может быть запущено, и период не может быть продлен.Тогда блокировка будет разблокирована через 30 секунд.
напиши в конце
Если вы давний поклонник официального аккаунта Feichao, и у вас возникли проблемы во время собеседования и работы, то можете зайти и пофлиртовать, но Feichao серьезный Java-разработчик, мы только настраиваем интерфейс, а не флирт!