В бизнес-сценариях одновременное управление контентом, таким как инвентаризация товаров, один и тот же файл и т.д., не разрешено, и приложение программы разворачивается на нескольких серверах.
Ранее написанный распределённый замок на базе zk выглядит следующим образом:
Что вам также нужно знать, чтобы прочитать эту статью:
.NET Core реализует распределённые блокировки на базе RedisПринцип заключается в вызове команды SETNX redis, если ключ уже существует, команда SETNX ничего не выполняет. Команда возвращает 1 при успешном выполнении настройки и 0 при невыполнении настройки.
Вход по гиперссылке виден.
Создайте новый консольный проект для .NET Core 3.1, добавьте ссылку на StackExchange.Redis и используйте команду nuget следующим образом:
Мы вызываем метод библиотеки StringSet, через исходный код StackExchange.Redis видно, что метод StringSet вызовет приватный метод GetStringSetMessage для выполнения различных команд множества через значение перечисления, когда код выглядит следующим образом:
Мы выполняем команду SETNX 2000 раз через параллельный тестовый вызов программы, который выполняется в 2 этапа, при этом кэш-валидность ключа составляет 5 секунд, то есть ключ автоматически освобождается через 5 секунд, то есть блокировка будет снята.
Код таков:
Как видно, всего 2 успешные вставки и неудачные попытки в 1998 году — именно то, что мы ожидали, а рендеры следующие:
На данный момент замок ещё не освобождён. (Конец)
|