Redis GETEX

Redis Getex



Redis è un archivio dati chiave-valore utilizzato come cache in memoria, database, serie temporali, motore di flusso, broker di messaggi, ecc. Poiché l'archivio dati Redis utilizza un semplice formato di coppia chiave-valore per contenere i dati, è molto memoria efficiente. Inoltre, la velocità di interrogazione è molto elevata con complessità temporali ridotte come O(1) e O(log(N)). Le chiavi Redis possono contenere diverse strutture di dati, come stringhe, set, hash, set ordinati ed elenchi.

Di solito, i comandi GET e SET vengono utilizzati per archiviare e recuperare valori di tipo stringa archiviati in una determinata chiave Redis. Questi due comandi operano con una complessità temporale costante.







Inoltre, il comando GETEX è disponibile per leggere i valori di stringa memorizzati in una determinata chiave. Ma questo comando è anche associato a un'operazione di scrittura parallela. Questa guida si concentrerà sulla sintassi del comando GETEX, sulle sue opzioni e sui casi d'uso.



TTL di una chiave Redis

Il valore time to live(TTL) è il tempo di scadenza di un dato dato. Di solito, un TTL può essere associato alle righe del database. È anche possibile impostare un timeout con i tasti Redis. Pertanto, un client Redis può controllare i secondi rimanenti in cui una determinata chiave sarà disponibile nell'archivio dati. Redis offre un comando TTL per controllare il valore del tempo residuo di una determinata chiave. Se nessun timeout è associato a una chiave specificata, il comando TTL restituisce -1. Useremo il comando TTL nelle prossime sezioni per controllare il tempo rimanente di una determinata chiave.



Il comando GETEX

Come evidenziato, il comando GETEX è più simile al comando GET, tranne per il fatto che può essere utilizzato per impostare un tempo di scadenza per la chiave specificata. Inoltre, un'opzione di comando può rimuovere un valore di timeout da una determinata chiave. La sintassi del comando GETEX è la seguente:





Chiave GETEX [ EX timeout_in_secondi | Timeout PX_in_millisecondi | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-milliseconds | PERSISTERE ]

chiave: Questa è la chiave che punta a un valore stringa.

I seguenti argomenti facoltativi possono essere utilizzati per impostare un timeout in secondi o millisecondi.



EX: Questo imposterà il tempo di scadenza in secondi per una determinata chiave.

PX: Il valore di timeout della chiave verrà impostato in millisecondi.

Inoltre, possiamo specificare un valore di timestamp UNIX in secondi o millisecondi utilizzando le seguenti opzioni di comando EXAT e PXAT :

EXAT: Il tempo di scadenza verrà impostato nel formato di timestamp UNIX e il timestamp sarà in secondi.

PXAT: Il timeout per una determinata chiave Redis verrà impostato come timestamp UNIX in millisecondi.

PERSISTERE: Specificando ciò, è possibile rimuovere il valore del tempo residuo associato a una chiave specificata.

Il comando GETEX restituisce il valore della chiave specificata. Questo comando funziona solo con valori di tipo stringa ma non hash, elenchi, set ordinati, ecc. Se si specifica una chiave associata a un valore non stringa, il comando restituirà un errore. Inoltre, se la chiave è già scaduta o non esiste, il comando tornerà zero.

Nella sezione seguente, tratteremo l'uso pratico del comando GETEX.

Caso d'uso: collegamento di ripristino temporaneo o generazione di codice PIN per recupero password/OTP

Una società di web hosting fornisce una funzione di recupero della password per gli utenti registrati. Come misura di sicurezza, inviano all'utente un nuovo collegamento URL, che scadrà entro 5 minuti. L'azienda utilizza l'archivio dati Redis da molto tempo e utilizza il comando GETEX per impostare un valore di tempo per vivere per un determinato utente.

Supponiamo che un utente con user_id 1000 richieda il recupero della password. Pertanto, l'URL di ripristino può essere archiviato nella chiave URL di ripristino:ID utente:1000 . Possiamo usare il comando SET per memorizzare l'URL di ripristino come segue:

impostare RecoveryURL:ID utente: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Verifichiamo se l'URL della stringa è archiviato correttamente nella chiave URL di ripristino:ID utente:1000. Possiamo usare il comando GETEX come segue:

getex RecoveryURL:ID utente: 1000

L'output del comando precedente è mostrato di seguito:

Se abbiamo usato il comando GET invece del comando GETEX, l'output sarà lo stesso.

Utilizziamo il comando TTL per verificare se a questa chiave è associato un tempo di scadenza.

URL di ripristino Ttl:ID utente: 1000

Come previsto, il comando TTL ha restituito -1, il che significa che nessun tempo di scadenza è associato alla chiave specificata.

Come in questo esempio, la società di hosting deve impostare un timeout di 5 minuti per l'URL di ripristino. Quindi, useremo il EX opzione di comando. Poiché 5 minuti sono 300 secondi, possiamo costruire il comando GETEX come segue:

getex RecoveryURL:ID utente: 1000 EX 500

Eseguiamo il comando TTL alcune volte per ispezionare il tempo rimanente in cui la chiave esisterà nell'archivio dati.

Come previsto, il tempo sta diminuendo e, alla fine, il URL di ripristino:ID utente:1000 la chiave verrà rimossa. Quello che segue è l'output dopo 5 minuti:

Il -2 è stato restituito dal comando, il che significa che la chiave è scaduta ed è stata eliminata dall'archivio dati.

A volte, potrebbe essere necessario rimuovere il valore di timeout associato a una determinata chiave. Pertanto, l'opzione del comando PERSIST può essere utilizzata per eliminare un valore TTL relativo a una chiave specificata.

Creiamo un'altra chiave di esempio e le assegniamo un valore stringa. In questo caso, specificheremo il valore TTL in millisecondi passando il PX opzione.

impostare KeytoTestPersist 'Questo scadrà entro 60 secondi' PX 50000

Successivamente, controlleremo il tempo rimanente come segue:

Come previsto, il TTL sta diminuendo. Chiamiamo il comando GETEX con l'opzione PERSIST come segue:

getex KeytoTestPersist persiste

Idealmente, questo rimuoverebbe il TTL associato a questa chiave. Esaminiamo il TTL per la chiave KeytoTestPersist.

Il comando TTL ha restituito -1, il che significa che nessun TTL è associato alla chiave KeytoTestPersist.

Allo stesso modo, il GETEX Il comando può essere utilizzato per impostare il tempo di scadenza per le chiavi nel timestamp UNIX.

Conclusione

In sintesi, il comando Redis GETEX può essere utilizzato per recuperare i valori di stringa memorizzati in una determinata chiave come fa il comando GET. L'unica differenza con il comando GETEX è che supporta l'impostazione e la rimozione dei tempi di scadenza per una determinata chiave. Supporta diversi argomenti facoltativi per specificare il tempo di scadenza in secondi, millisecondi e secondi o millisecondi di timestamp UNIX. Come discusso, il comando fornisce l'opzione PERSIST per rimuovere il TTL associato per una determinata chiave. Nel complesso, il comando GETEX opera con una complessità temporale costante.