Redis setnx

Redis setnx

Tipo di dati String Redis

Redis è un archivio dati in memoria che supporta strutture di dati più complesse rispetto ad altri negozi di dati sul valore chiave. Tra tutte queste complesse strutture di dati come set, hash, bitmap ed elenchi, supporta anche i tipi di stringa più semplici. In tal caso, una chiave stringa mappa a un valore di stringa. Di solito, i comandi SET e GET vengono utilizzati per creare e recuperare i dati del valore chiave dal Redis Store. Inoltre, il comando set crea una nuova chiave nella memoria e mappa un valore di stringa, nient'altro che questo. Sovrascriverà il valore se la chiave esiste già.

Nessun meccanismo di sicurezza è implementato con il comando set per impostazione predefinita per gestire contemporaneamente le mutazioni del valore di più clienti senza accordo reciproco. Questo comando deve essere chiamato con misurazioni di sicurezza in atto, come un meccanismo di blocco.

Impostazione condizionale di un valore chiave

È sempre meglio seguire una misura di sicurezza quando si muta un valore che viene archiviato in una determinata chiave. Quindi, Redis ha introdotto un'opzione al comando set Nx questo è in atto e non muta il valore di una chiave già esistente. Lo stesso comportamento è stato implementato con un nuovo comando spiegato nella sezione successiva.

Il comando setNX

Il comando setnx, come suggerisce il nome, "Impostare se non esiste ", il che significa che il comando imposterà un valore solo se e solo se la chiave specificata non esiste nell'archivio dati. Ogni volta che esiste già la chiave specificata, il comando non eseguirà alcuna operazione su tale chiave. Con tale restrizione, il comando setNX è più sicuro del comando set. Inoltre, questo comando ha una costante complessità del tempo.

Sintassi:

Valore setnx Redis_key

Redis_key: L'identificatore univoco di una voce di coppia di valore chiave Redis.

valore: Il valore associato alla chiave Redis.

Questo comando restituirà una risposta intero in cui la chiave 1 significa è stata impostata con un nuovo valore. Se il valore restituito è 0, la chiave non è impostata e la chiave esistente manterrà il vecchio valore.

Esempio 01 - Meccanismo di bloccaggio con setnx

Supponiamo che un gioco online in cui più giocatori accederanno a un secchio d'oro comune di proprietà della loro squadra. I giocatori possono accedere al secchio d'oro e riempirlo con l'oro che hanno trovato esplorando il mondo. Immagina il giocatore uno accede al secchio d'oro e lascia cadere un po 'd'oro in un periodo fisso. Allo stesso tempo, il giocatore due tenta di consumare un po 'd'oro dallo stesso secchio. In tal caso, l'accesso non dovrebbe essere consegnato al giocatore due fino a quando il giocatore non rilascia il secchio d'oro. Questo può essere implementato con il comando setnx con un semplice meccanismo di blocco.

IL Giocatore: 1 Può utilizzare il comando setnx per impostare l'importo totale dell'oro nel secchio. Supponiamo che conserveremo l'importo dell'oro nella chiave Goldbucket.

Setnx Goldbucket 100

Come previsto, il Goldbucket La chiave è stata creata con un valore di 100. Ora, Giocatore: 1 ha la serratura. Diciamo Giocatore: 2 chiamerà il comando setnx per impostare il nuovo importo d'oro.

Setnx Goldbucket 200

Questa volta il comando restituisce 0 perché la chiave Goldbucket esiste. In altre parole, la chiave è bloccata dal Giocatore: 1 Già. Quindi, giocatore: 2 deve aspettare fino al giocatore: 1 rilascia il blocco eliminando o scadenza del timeout automatico.

Controlliamo il valore associato al Goldbucket Chiave, come mostrato nel seguente.

Ottieni Goldbucket

Come previsto, il valore è ancora 100, il che significa Giocatore: 1 ha già bloccato il valore dei dati. Quindi, Giocatore: 2 deve continuare ad aspettare fino alla scadenza del timeout e Giocatore: 1 rilascialo.

Può esserci una situazione di deadlock se il client si arresta in modo anomalo o fallisce a causa di un errore di rete e il blocco non è stato rilasciato dal client arrestato. Più client potrebbero notarlo e provare a rimuovere il blocco utilizzando il comando DEL. Di conseguenza, ogni cliente eliminerà ripetutamente le proprie chiavi, il che porterà a uno stallo.

Può essere risolto da ciascun client che controlla in anticipo il timestamp utilizzando il comando GETSET e quindi acquisendo il blocco utilizzando il comando setnx se e solo se il timestamp è scaduto.

Conclusione

Per riassumere, Redis è un archivio di valore chiave che supporta i tipi di dati di stringa più semplici tra le altre strutture di dati complesse come hash, set, bitmap ed elenchi. Come tutti sapete, Imposta e Get sono i comandi più elementari che possono essere utilizzati per creare e recuperare le coppie di valore chiave Redis. Il metodo set viene utilizzato per creare coppie di valore chiave nel database Redis che alla fine sovrascrive il valore associato per una chiave specificata se la chiave esiste già nel database. Come precedentemente evidenziato nell'articolo, questa mutazione di valore non sicuro può essere limitata al comando Redis SetNX. Il comando setNX imposta il valore per una determinata chiave se la chiave non esiste già. Ogni volta che esiste una chiave, il comando non esegue nulla e restituisce 0. Pertanto, il comando setNX viene utilizzato per implementare meccanismi di blocco in applicazioni in tempo reale.