În scenarii de afaceri, operațiunile simultane ale conținutului, cum ar fi inventarul de mărfuri, același fișier etc., nu sunt permise, iar aplicația programului este implementată pe mai multe servere.
Blocajul distribuit bazat pe zk, scris anterior, este următorul:
Ce trebuie să știi și pentru a citi acest articol:
.NET Core implementează blocaje distribuite bazate pe RedisPrincipiul este să apelăm comanda SETNX a redis, dacă cheia există deja, comanda SETNX nu face nimic. Comanda returnează 1 când setarea reușește și 0 când setarea eșuează.
Autentificarea cu hyperlink este vizibilă.
Creează un nou proiect de consolă .NET Core 3.1, adaugă o referință la StackExchange.Redis și folosește comanda nuget după cum urmează:
Numim metoda StringSet a bibliotecii, prin codul sursă StackExchange.Redis putem vedea că metoda StringSet va chema metoda privată GetStringSetMessage pentru a executa diferite comenzi de set prin valoarea de enumerare a când, codul este următorul:
Executăm comanda SETNX de 2000 de ori printr-un apel paralel de test către program, care se execută în 2 etape, în care valabilitatea cache-ului cheii este de 5 secunde, adică cheia va fi eliberată automat după 5 secunde, adică blocarea va fi eliberată.
Codul este următorul:
După cum puteți vedea, un total de 2 inserții reușite și 1998 de încercări eșuate sunt exact ce ne așteptam, iar randările sunt următoarele:
În acest moment, lacătul nu a fost încă eliberat. (Sfârșit)
|