Redis GETEX

Redis Getex



Redis is een sleutelwaardegegevensarchief dat wordt gebruikt als een in-memory cache, database, tijdreeks, stream-engine, berichtenmakelaar, enz. Aangezien het Redis-gegevensarchief een eenvoudig sleutel-waardepaarformaat gebruikt om gegevens vast te houden, is het erg geheugen efficiënt. Bovendien is de bevragingssnelheid erg hoog met lage tijdcomplexiteiten zoals O(1) en O(log(N)). Redis-sleutels kunnen verschillende gegevensstructuren bevatten, zoals strings, sets, hashes, gesorteerde sets en lijsten.

Gewoonlijk worden de GET- en SET-opdrachten gebruikt om string-type-waarden op te slaan en op te halen die zijn opgeslagen op een bepaalde Redis-sleutel. Deze twee commando's werken met een constante tijdcomplexiteit.







Bovendien is het GETEX-commando beschikbaar om stringwaarden te lezen die zijn opgeslagen op een bepaalde toets. Maar deze opdracht is ook gekoppeld aan een parallelle schrijfbewerking. Deze handleiding richt zich op de GETEX-opdrachtsyntaxis, de opties en gebruiksscenario's.



TTL van een Redis-sleutel

De time to live (TTL) -waarde is de vervaltijd van een bepaald stuk gegevens. Gewoonlijk kan een TTL worden gekoppeld aan databaserijen. Een time-out kan ook worden ingesteld met Redis-toetsen. Een Redis-client kan dus de resterende seconden controleren dat een bepaalde sleutel beschikbaar is in de gegevensopslag. Redis biedt een TTL-opdracht om de time-to-live-waarde van een bepaalde sleutel te controleren. Als er geen time-out is gekoppeld aan een opgegeven sleutel, retourneert de TTL-opdracht -1. We zullen het TTL-commando in de volgende paragrafen gebruiken om de resterende tijd van een bepaalde toets te controleren.



Het GETEX-commando

Zoals aangegeven, lijkt het GETEX-commando meer op het GET-commando, behalve dat het kan worden gebruikt om een ​​vervaltijd in te stellen voor de opgegeven sleutel. Bovendien kan een opdrachtoptie een time-outwaarde van een bepaalde sleutel verwijderen. De syntaxis van de GETEX-opdracht is als volgt:





GETEX-sleutel [ EX time-out_in_seconden | PX time-out_in_milliseconden | EXAT timeout_in_unix-tijd-seconden | PXAT timeout_in_unix-tijd-milliseconden | VOLHARDEN ]

sleutel: Dit is de sleutel die verwijst naar een tekenreekswaarde.

De volgende optionele argumenten kunnen worden gebruikt om een ​​time-out in seconden of milliseconden in te stellen.



EX: Hiermee wordt de vervaltijd in seconden voor een bepaalde sleutel ingesteld.

PX: De time-outwaarde voor de sleutel wordt ingesteld in milliseconden.

Daarnaast kunnen we een UNIX-tijdstempelwaarde in seconden of milliseconden specificeren met behulp van de volgende opdrachtopties: EXAT en PXAT :

EXAT: De vervaltijd wordt ingesteld in het UNIX-tijdstempelformaat en het tijdstempel is in seconden.

PXAT: De time-out voor een bepaalde Redis-sleutel wordt ingesteld als een UNIX-tijdstempel in milliseconden.

VOLHARDEN: Door dit op te geven, kunt u de time-to-live-waarde die aan een opgegeven sleutel is gekoppeld, verwijderen.

Het GETEX-commando retourneert de waarde van de opgegeven sleutel. Deze opdracht werkt alleen met waarden van het type tekenreeks, maar niet met hashes, lijsten, gesorteerde sets, enz. Als u een sleutel opgeeft die is gekoppeld aan een niet-tekenreekswaarde, retourneert de opdracht een fout. Bovendien, als de sleutel al is verlopen of niet bestaat, wordt de opdracht geretourneerd nul.

In de volgende sectie zullen we het praktische gebruik van het GETEX-commando behandelen.

Use Case - Tijdelijke resetlink of pincode genereren voor wachtwoordherstel/OTP's

Een webhostingbedrijf biedt een functie voor wachtwoordherstel voor geregistreerde gebruikers. Als veiligheidsmaatregel sturen ze een nieuwe URL-link naar de gebruiker, die binnen 5 minuten verloopt. Het bedrijf gebruikt de Redis-gegevensopslag al heel lang en gebruikt het GETEX-commando om een ​​time to live-waarde voor een bepaalde gebruiker in te stellen.

Laten we aannemen dat een gebruiker met user_id 1000 een wachtwoordherstel aanvraagt. De herstel-URL kan dus worden opgeslagen op de sleutel Herstel-URL:Gebruikers-ID:1000 . We kunnen de opdracht SET gebruiken om de herstel-URL als volgt op te slaan:

set Herstel-URL:Gebruikers-ID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Laten we eens kijken of de string-URL correct is opgeslagen bij de sleutel Herstel-URL:Gebruikers-ID:1000. We kunnen het GETEX-commando als volgt gebruiken:

getex RecoveryURL:Gebruikers-ID: 1000

De uitvoer van de vorige opdracht wordt als volgt weergegeven:

Als we het GET-commando hebben gebruikt in plaats van het GETEX-commando, zal de uitvoer hetzelfde zijn.

Laten we het TTL-commando gebruiken om te controleren of er een vervaltijd aan deze sleutel is gekoppeld.

Ttl RecoveryURL:Gebruikers-ID: 1000

Zoals verwacht is de -1 geretourneerd door de TTL-opdracht, wat betekent dat er geen vervaltijd is gekoppeld aan de opgegeven sleutel.

Volgens dit voorbeeld moet het hostingbedrijf een time-out van 5 minuten instellen voor de herstel-URL. Dus we zullen de gebruiken EX opdracht optie. Aangezien 5 minuten 300 seconden is, kunnen we het GETEX-commando als volgt construeren:

getex RecoveryURL:Gebruikers-ID: 1000 EX 500

Laten we de TTL-opdracht een paar keer uitvoeren om de resterende tijd te inspecteren dat de sleutel in het gegevensarchief aanwezig zal zijn.

Zoals verwacht, neemt de tijd af en uiteindelijk zal de Herstel-URL:Gebruikers-ID:1000 sleutel wordt verwijderd. Het volgende is de output na 5 minuten:

De -2 is geretourneerd door de opdracht, wat betekent dat de sleutel is verlopen en uit het gegevensarchief is verwijderd.

Soms moet u mogelijk de time-outwaarde die aan een bepaalde sleutel is gekoppeld, verwijderen. De opdrachtoptie PERSIST kan dus worden gebruikt om een ​​TTL-waarde te verwijderen die is gerelateerd aan een opgegeven sleutel.

Laten we nog een voorbeeldsleutel maken en er een tekenreekswaarde aan toewijzen. In dit geval specificeren we de TTL-waarde in milliseconden door de PX keuze.

set KeytoTestPersist 'Deze verloopt binnen 60 seconden' PX 50000

Vervolgens controleren we de resterende tijd als volgt:

Zoals verwacht daalt de TTL. Laten we het GETEX-commando met de PERSIST-optie als volgt aanroepen:

getex KeytoTestPersist persistent

In het ideale geval zou dit de TTL die aan deze sleutel is gekoppeld, verwijderen. Laten we de TTL inspecteren voor de sleutel KeytoTestPersist.

De TTL-opdracht retourneerde de -1, wat betekent dat er geen TTL is gekoppeld aan de sleutel KeytoTestPersist.

Evenzo is de GETEX commando kan worden gebruikt om de vervaltijd voor sleutels in UNIX-tijdstempel in te stellen.

Conclusie

Samengevat kan het Redis GETEX-commando worden gebruikt om de stringwaarden op te halen die zijn opgeslagen op een bepaalde sleutel, zoals het GET-commando doet. Het enige verschil met het GETEX-commando is dat het het instellen en verwijderen van vervaltijden voor een bepaalde sleutel ondersteunt. Het ondersteunt verschillende optionele argumenten om de vervaltijd in seconden, milliseconden en UNIX-tijdstempel seconden of milliseconden op te geven. Zoals besproken, biedt de opdracht de PERSIST-optie om de bijbehorende TTL voor een bepaalde sleutel te verwijderen. Over het algemeen werkt het GETEX-commando met een constante tijdcomplexiteit.