Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 34174|Відповідь: 5

[.NET Core] .NET Core реалізує розподілений принцип блокування на основі Redis

[Копіювати посилання]
Опубліковано 22.09.2020 09:17:22 | | | |
У бізнес-сценаріях одночасні операції з контентом, такими як товарний інвентар, один і той самий файл тощо, не дозволяються, і програмний додаток розгортається на кількох серверах.
[Реальний бій] ASP.NET Core базується на розподіленому розпродажі замків Redis
https://www.itsvse.com/thread-9397-1-1.html

Раніше написаний розподілений замок на основі zk виглядає так:

.net/c# Реалізація розподіленого блокування Zookeeper [Вихідний код]
https://www.itsvse.com/thread-4651-1-1.html

Що вам також потрібно знати, щоб прочитати цю статтю:

Волатильна проти взаємоблокуваної проти блокування
https://www.itsvse.com/thread-5023-1-1.html

C# Паралельні обчислення Parallel.For&Parallel.For
https://www.itsvse.com/thread-3671-1-1.html

.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 році — це саме те, чого ми очікували, а рендери такі:


На даний момент замок ще не був відкритий.
(Кінець)









Попередній:Не зміг знайти обхідний шлях для частини шляху «\bin\roslyn\csc.exe»
Наступний:EF Core Series 2 інкапсулює OnModelCreating, створює індекси за допомогою відображень та інше
 Орендодавець| Опубліковано 26.09.2020 15:37:52 |
test123
Опубліковано 20.11.2020 11:18:31 |
Якщо при розгортанні контейнерів є багатопотокове середовище і багатоекземплярне середовище, чи є проблема з цією обробкою?
 Орендодавець| Опубліковано 20.11.2020 11:29:44 |
Qiuyueming Опубліковано 2020-11-20 11:18
Якщо при розгортанні контейнерів є багатопотокове середовище і багатоекземплярне середовище, чи є проблема з цією обробкою? ...

Мультиекземпляр означає багатопотокність, а в вихідному коді багатопотоковий викликає redis, і лише один потік отримує блокування
Опубліковано 22.03.2022 14:32:40 |
Підтримка, підтримка
Опубліковано 23.03.2022 11:15:30 |
Дізнайтеся, що це добре @
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com