Redis GETEX

Redis Getex



Redis este un depozit de date cheie-valoare utilizat ca cache în memorie, bază de date, serii cronologice, motor de flux, broker de mesaje etc. Deoarece magazinul de date Redis utilizează un format simplu de pereche cheie-valoare pentru a păstra date, este foarte memorie. eficient. În plus, viteza de interogare este foarte mare, cu complexități de timp reduse, cum ar fi O(1) și O(log(N)). Cheile Redis pot conține diferite structuri de date, cum ar fi șiruri, seturi, hashuri, seturi sortate și liste.

De obicei, comenzile GET și SET sunt folosite pentru a stoca și a prelua valori de tip șir stocate la o anumită cheie Redis. Aceste două comenzi operează cu o complexitate de timp constantă.







În plus, comanda GETEX este disponibilă pentru a citi valorile șirurilor stocate la o anumită cheie. Dar această comandă este asociată și cu o operație de scriere paralelă. Acest ghid se va concentra pe sintaxa comenzii GETEX, opțiunile acesteia și cazurile de utilizare.



TTL al unei chei Redis

Valoarea time to live (TTL) este timpul de expirare a unei date date. De obicei, un TTL poate fi asociat cu rândurile bazei de date. Un timeout poate fi setat și cu tastele Redis. Deci, un client Redis poate verifica secundele rămase în care o anumită cheie va fi disponibilă în depozitul de date. Redis oferă o comandă TTL pentru a verifica valoarea time to live a unei anumite chei. Dacă nu este asociat niciun timeout cu o cheie specificată, comanda TTL returnează -1. Vom folosi comanda TTL în secțiunile următoare pentru a verifica timpul rămas al unei anumite chei.



Comanda GETEX

După cum sa evidențiat, comanda GETEX este mai asemănătoare cu comanda GET, cu excepția faptului că poate fi folosită pentru a seta un timp de expirare pentru cheia specificată. În plus, o opțiune de comandă poate elimina o valoare de timeout de la o anumită cheie. Sintaxa comenzii GETEX este următoarea:





Tasta GETEX [ EX timeout_in_seconds | PX timeout_in_milisecunde | EXAT timeout_in_unix-time-secunde | PXAT timeout_in_unix-time-milisecunde | PERSISTA ]

cheie: Aceasta este cheia care indică o valoare șir.

Următoarele argumente opționale pot fi folosite pentru a seta un timeout în secunde sau milisecunde.



EX: Aceasta va seta timpul de expirare în secunde pentru o anumită cheie.

PX: Valoarea de expirare a cheii va fi setată în milisecunde.

În plus, putem specifica o valoare de marcaj temporal UNIX în secunde sau milisecunde utilizând următoarele opțiuni de comandă EXAT și PXAT :

EXAT: Timpul de expirare va fi setat în formatul de marcaj de timp UNIX, iar marca de timp va fi în secunde.

PXAT: Timpul de expirare pentru o anumită cheie Redis va fi setat ca marcaj temporal UNIX în milisecunde.

PERSISTA: Specificând acest lucru, puteți elimina valoarea time to live asociată cu o cheie specificată.

Comanda GETEX returnează valoarea cheii specificate. Această comandă funcționează numai cu valori de tip șir, dar nu cu hashuri, liste, seturi sortate etc. Dacă specificați o cheie asociată cu o valoare care nu este șir, comanda va returna o eroare. În plus, dacă cheia este deja expirată sau nu există, comanda va reveni zero.

În secțiunea următoare, vom acoperi utilizarea practică a comenzii GETEX.

Caz de utilizare — Legătură de resetare temporară sau generare de cod PIN pentru recuperarea parolei/OTP

O companie de găzduire web oferă o funcție de recuperare a parolei pentru utilizatorii înregistrați. Ca măsură de securitate, ei trimit utilizatorului un nou link URL, care va expira în 5 minute. Compania folosește magazinul de date Redis de mult timp și folosește comanda GETEX pentru a seta o valoare a timpului de viață pentru un anumit utilizator.

Să presupunem că un utilizator cu user_id 1000 solicită recuperarea parolei. Deci, URL-ul de recuperare poate fi stocat la cheie RecoveryURL:UserID:1000 . Putem folosi comanda SET pentru a stoca adresa URL de recuperare după cum urmează:

a stabilit RecoveryURL:UserID: 1000 „https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs”

Să verificăm dacă URL-ul șirului este stocat corect la cheie RecoveryURL:UserID:1000. Putem folosi comanda GETEX după cum urmează:

getex RecoveryURL:UserID: 1000

Ieșirea comenzii anterioare este afișată în următoarele:

Dacă am folosit comanda GET în loc de comanda GETEX, rezultatul va fi același.

Să folosim comanda TTL pentru a verifica dacă un timp de expirare este asociat cu această cheie.

Ttl RecoveryURL:UserID: 1000

După cum era de așteptat, -1 a fost returnat de comanda TTL, ceea ce înseamnă că nu este asociat niciun timp de expirare cheii specificate.

Conform acestui exemplu, compania de găzduire trebuie să seteze un timeout de 5 minute pentru adresa URL de recuperare. Deci, vom folosi EX opțiunea de comandă. Deoarece 5 minute sunt 300 de secunde, putem construi comanda GETEX după cum urmează:

getex RecoveryURL:UserID: 1000 EX 500

Să rulăm comanda TTL de câteva ori pentru a inspecta timpul rămas în care cheia va exista în depozitul de date.

După cum era de așteptat, timpul scade și, în cele din urmă, RecoveryURL:UserID:1000 cheia va fi eliminată. Următorul este rezultatul după 5 minute:

-2 a fost returnat de comandă, ceea ce înseamnă că cheia este expirată și ștearsă din depozitul de date.

Uneori, poate fi necesar să eliminați valoarea timeout asociată cu o anumită cheie. Deci, opțiunea de comandă PERSIST poate fi folosită pentru a șterge o valoare TTL legată de o cheie specificată.

Să creăm o altă cheie de probă și să îi atribuim o valoare de șir. În acest caz, vom specifica valoarea TTL în milisecunde prin trecerea PX opțiune.

a stabilit KeytoTestPersist „Acesta va fi expirat în 60 de secunde” PX 50000

În continuare, vom verifica timpul rămas după cum urmează:

După cum era de așteptat, TTL este în scădere. Să apelăm comanda GETEX cu opțiunea PERSIST după cum urmează:

getex KeytoTestPersist persistă

În mod ideal, aceasta ar elimina TTL-ul asociat cu această cheie. Să inspectăm TTL-ul pentru cheie KeytoTestPersist.

Comanda TTL a returnat -1, ceea ce înseamnă că niciun TTL nu este asociat cu cheia KeytoTestPersist.

În mod similar, cel GETEX comanda poate fi utilizată pentru a seta timpul de expirare pentru chei în marcaj temporal UNIX.

Concluzie

În rezumat, comanda Redis GETEX poate fi utilizată pentru a prelua valorile șirurilor stocate la o anumită cheie, așa cum o face comanda GET. Singura diferență cu comanda GETEX este că acceptă setarea și eliminarea timpilor de expirare pentru o anumită cheie. Acceptă mai multe argumente opționale pentru a specifica timpul de expirare în secunde, milisecunde și secunde sau milisecunde pentru marcaj temporal UNIX. După cum sa discutat, comanda oferă opțiunea PERSIST pentru a elimina TTL asociat pentru o anumită cheie. În general, comanda GETEX operează cu o complexitate constantă în timp.