W scenariuszach biznesowych jednoczesne operacje z treścią, takie jak inwentarz towarowy, ten sam plik itp., nie są dozwolone, a aplikacja jest wdrażana na wielu serwerach.
Wcześniej zapisany rozproszony zamek oparty na zk wygląda następująco:
Co również musisz wiedzieć, aby przeczytać ten artykuł:
.NET Core implementuje rozproszone blokady oparte na RedisieZasada polega na wywołaniu polecenia SETNX w redis, jeśli klucz już istnieje, polecenie SETNX nic nie robi. Polecenie zwraca 1, gdy ustawienie się powiodło, i 0, gdy ustawienie się nie powiedzie.
Logowanie do linku jest widoczne.
Stwórz nowy projekt konsoli .NET Core 3.1, dodaj referencję do StackExchange.Redis i użyj polecenia nuget w następujący sposób:
Metodę StringSet biblioteki wywołujemy przez kod źródłowy StackExchange.Redis, widzimy, że metoda StringSet wywołuje prywatną metodę GetStringSetMessage, aby wykonać różne polecenia zestawu za pomocą wartości enumeracyjnej , a kod wygląda następująco:
Wykonujemy polecenie SETNX 2000 razy poprzez równoległe wywołanie testowe do programu, które odbywa się w 2 częściach, w których ważność pamięci podręcznej klucza wynosi 5 sekund, czyli klucz zostanie automatycznie zwolniony po 5 sekundach, czyli blokada zostanie zwolniona.
Kod jest następujący:
Jak widać, łącznie 2 udane wstawienia i nieudane próby z 1998 roku są dokładnie tym, czego się spodziewaliśmy, a wizualizacje przedstawiają się następująco:
Obecnie zamek nie został jeszcze zwolniony. (Koniec)
|