Redis GETEX

Redis Getex



Redis är ett nyckel-värde datalager som används som en cache i minnet, databas, tidsserier, streammotor, meddelandeförmedlare, etc. Eftersom Redis datalager använder ett enkelt nyckel-värde par format för att hålla data, är det mycket minne effektiv. Dessutom är frågehastigheten mycket hög med låg tidskomplexitet som O(1) och O(log(N)). Redis-nycklar kan innehålla olika datastrukturer, såsom strängar, uppsättningar, hash, sorterade uppsättningar och listor.

Vanligtvis används kommandona GET och SET för att lagra och hämta strängtypsvärden lagrade vid en given Redis-nyckel. Dessa två kommandon arbetar med konstant tidskomplexitet.







Dessutom är kommandot GETEX tillgängligt för att läsa strängvärden lagrade vid en given nyckel. Men detta kommando är också associerat med en parallell skrivoperation. Den här guiden kommer att fokusera på GETEX-kommandosyntaxen, dess alternativ och användningsfall.



TTL för en Redis Key

Time to live (TTL)-värdet är utgångstiden för en given databit. Vanligtvis kan en TTL associeras med databasrader. En timeout kan också ställas in med Redis-tangenter. Så en Redis-klient kan kontrollera de återstående sekunderna att en given nyckel kommer att vara tillgänglig i datalagret. Redis erbjuder ett TTL-kommando för att kontrollera tiden till live-värdet för en given nyckel. Om ingen timeout är associerad med en angiven nyckel, returnerar TTL-kommandot -1. Vi kommer att använda TTL-kommandot i nästa avsnitt för att kontrollera återstående tid för en given nyckel.



GETEX-kommandot

Som markerats är GETEX-kommandot mer likt GET-kommandot, förutom att det kan användas för att ställa in en utgångstid för den angivna nyckeln. Dessutom kan ett kommandoalternativ ta bort ett timeoutvärde från en given nyckel. Syntaxen för GETEX-kommandot är som följer:





GETEX-nyckel [ EX timeout_in_seconds | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-secons | PXAT timeout_in_unix-time-milliseconds | ENVISAS ]

nyckel: Det här är nyckeln som pekar på ett strängvärde.

Följande valfria argument kan användas för att ställa in en timeout i sekunder eller millisekunder.



EX: Detta kommer att ställa in utgångstiden i sekunder för en given nyckel.

PX: Nyckelns timeout-värde kommer att ställas in i millisekunder.

Dessutom kan vi ange ett UNIX-tidsstämpelvärde i sekunder eller millisekunder med hjälp av följande kommandoalternativ EXAT och PXAT :

EXAT: Förfallotiden kommer att ställas in i UNIX-tidsstämpelformatet och tidsstämpeln kommer att vara i sekunder.

PXAT: Timeouten för en given Redis-nyckel kommer att ställas in som en UNIX-tidsstämpel i millisekunder.

ENVISAS: Genom att ange detta kan du ta bort time to live-värdet som är associerat med en angiven nyckel.

Kommandot GETEX returnerar värdet på den angivna nyckeln. Det här kommandot fungerar bara med värden av strängtyp men inte hash, listor, sorterade uppsättningar etc. Om du anger en nyckel som är associerad med ett icke-strängvärde kommer kommandot att returnera ett fel. Dessutom, om nyckeln redan har löpt ut eller inte finns, kommer kommandot att returneras noll.

I följande avsnitt kommer vi att täcka den praktiska användningen av kommandot GETEX.

Användningsfall — Temporary Reset Link eller PIN-kodgenerering för lösenordsåterställning/OTP:er

Ett webbhotell tillhandahåller en lösenordsåterställningsfunktion för registrerade användare. Som en säkerhetsåtgärd skickar de en ny URL-länk till användaren, som upphör att gälla inom 5 minuter. Företaget har använt Redis datalager under lång tid och använder kommandot GETEX för att ställa in en tid till live-värde för en given användare.

Låt oss anta att en användare med user_id 1000 begär en lösenordsåterställning. Så återställningsadressen kan lagras vid nyckeln RecoveryURL:Användar-ID:1000 . Vi kan använda kommandot SET för att lagra återställningsadressen enligt följande:

uppsättning RecoveryURL:Användar-ID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Låt oss kontrollera om strängens URL är korrekt lagrad vid nyckeln RecoveryURL:Användar-ID:1000. Vi kan använda kommandot GETEX enligt följande:

getex RecoveryURL:Användar-ID: 1000

Utdata från föregående kommando visas i följande:

Om vi ​​har använt GET-kommandot istället för GETEX-kommandot, blir utdata densamma.

Låt oss använda TTL-kommandot för att kontrollera om en utgångstid är associerad med denna nyckel.

Ttl RecoveryURL:Användar-ID: 1000

Som förväntat har -1 returnerats av TTL-kommandot, vilket betyder att ingen utgångstid är associerad med den angivna nyckeln.

Enligt det här exemplet måste värdföretaget ställa in en 5 minuters timeout för återställningswebbadressen. Så vi kommer att använda EX kommandoalternativ. Eftersom 5 minuter är 300 sekunder kan vi konstruera GETEX-kommandot enligt följande:

getex RecoveryURL:Användar-ID: 1000 EX 500

Låt oss köra TTL-kommandot några gånger för att inspektera den återstående tiden som nyckeln kommer att finnas i datalagret.

Som väntat minskar tiden och så småningom RecoveryURL:Användar-ID:1000 nyckel kommer att tas bort. Följande är resultatet efter 5 minuter:

-2:an har returnerats av kommandot, vilket betyder att nyckeln har gått ut och raderats från datalagret.

Ibland kan du behöva ta bort timeoutvärdet för en given nyckel. Så, kommandoalternativet PERSIST kan användas för att ta bort ett TTL-värde relaterat till en specificerad nyckel.

Låt oss skapa en annan exempelnyckel och tilldela den ett strängvärde. I det här fallet kommer vi att ange TTL-värdet i millisekunder genom att skicka PX alternativ.

uppsättning KeytoTestPersist 'Detta kommer att förfalla inom 60 sekunder' PX 50 000

Därefter kommer vi att kontrollera den återstående tiden enligt följande:

Som väntat minskar TTL. Låt oss anropa kommandot GETEX med alternativet PERSIST enligt följande:

getex KeytoTestPersist kvarstår

Helst skulle detta ta bort TTL associerad med denna nyckel. Låt oss inspektera TTL för nyckeln KeytoTestPersist.

TTL-kommandot returnerade -1, vilket betyder att ingen TTL är associerad med nyckeln KeytoTestPersist.

På liknande sätt GETEX kommandot kan användas för att ställa in utgångstiden för nycklar i UNIX tidsstämpel.

Slutsats

Sammanfattningsvis kan Redis GETEX-kommandot användas för att hämta strängvärdena lagrade vid en given nyckel som GET-kommandot gör. Den enda skillnaden med GETEX-kommandot är att det stöder att ställa in och ta bort utgångstider för en given nyckel. Den stöder flera valfria argument för att ange utgångstiden i sekunder, millisekunder och UNIX-tidsstämpel sekunder eller millisekunder. Som diskuterats tillhandahåller kommandot PERSIST-alternativet för att ta bort tillhörande TTL för en given nyckel. Sammantaget fungerar GETEX-kommandot med konstant tidskomplexitet.