Сценарії застосування розподілених блокувань: З появою сервісів окремі додатки стають кластерами, розподілені блокування вирішують роботу різних процесів (потоків) на одному ресурсі в одночасних ситуаціях, і деякі сервіси повинні вимагати одного потоку для роботи, наприклад: зміни суми депозитів, зміни запасів товарів тощо.
Огляд:
У попередній статті «[Практика]ASP.NET Core Based on Redis Distributed Lock Flash Kill» коли ми додали блокування, ми також увімкнули фоновий потік для подовження часу блокування, щоб гарантувати, що блокування, зайняте іншими потоками, не буде випадково видалено.
Після того, як ви навчитеся використовувати Lua-скрипти в Redis, ви легко можете використовувати скрипти для завершення блокування захоплення та розблокування блокувань.
Спершу розглянемо зображення наступного вигляду:
Спочатку ми відкрили 1000 паралельних ниток, щоб змагатися за замок, і замок закінчився на 5 секунд.Ми завершили 1000 потоків за 5 секунд, і лише один потік успішно отримав блокуванняПісля 6 секунд очікування замок автоматично буде відкритий, і ви побачите, що друге завдання успішно отримало замок і одразу його зняло, а наступний код успішно отримав замок.
Скрипт lua для отримання замка виглядає так:
Скрипт lua для звільнення замка виглядає так:
Код інтерфейсу:
Завантаження вихідного коду:Вхід за гіперпосиланням видно.
Модифікація «[Практика] ASP.NET Core на основі розподіленого розпродажу флеш-розпродажу Redis» реалізована з використанням цієї статті, і наш вебсайт це імітує.10000 предметів, а потім написав консоль для імітації часу HTTP-запитуАншлаг завершується за 6 секунд, як показано на рисунку нижче:
Модифікувати код запиту на тестову симуляцію:
(Кінець)
|