Negli scenari aziendali, operazioni simultanee di contenuti, come l'inventario di merci, lo stesso file, ecc., non sono consentite, e l'applicazione del programma viene distribuita su più server.
Il blocco distribuito basato su zk scritto in precedenza è il seguente:
Cosa devi sapere anche per leggere questo articolo:
.NET Core implementa locks distribuiti basati su RedisIl principio è chiamare il comando SETNX di redis, se la chiave esiste già, il comando SETNX non fa nulla. Il comando restituisce 1 quando l'impostazione ha successo e 0 quando l'impostazione fallisce.
Il login del link ipertestuale è visibile.
Crea un nuovo progetto console .NET Core 3.1, aggiungi un riferimento a StackExchange.Redis e usa il comando nuget come segue:
Chiamiamo il metodo StringSet della libreria, tramite il codice sorgente StackExchange.Redis possiamo vedere che il metodo StringSet chiamerà il metodo privato di GetStringSetMessage per eseguire diversi comandi set tramite il valore di enumerazione di quando, il codice è il seguente:
Eseguiamo il comando SETNX 2000 volte tramite una chiamata di test parallela al programma, che viene eseguita in 2 punte, in cui la validità della cache della chiave è di 5 secondi, cioè la chiave verrà rilasciata automaticamente dopo 5 secondi, cioè il blocco verrà rilasciato.
Il codice è il seguente:
Come potete vedere, un totale di 2 inserimenti riusciti e 1998 tentativi falliti sono esattamente ciò che ci aspettavamo, e i rendering sono i seguenti:
Al momento, la serratura non è ancora stata liberata. (Fine)
|