Redis GETEX

Redis Getex



Redis er et nøgleværdi datalager, der bruges som en in-memory cache, database, tidsserier, stream engine, meddelelsesmægler osv. Da Redis datalageret bruger et simpelt nøgleværdi par format til at opbevare data, er det meget hukommelse effektiv. Derudover er forespørgselshastigheden meget høj med lav tidskompleksitet som O(1) og O(log(N)). Redis-nøgler kan indeholde forskellige datastrukturer, såsom strenge, sæt, hashes, sorterede sæt og lister.

Normalt bruges GET- og SET-kommandoerne til at gemme og hente strengtypeværdier, der er gemt på en given Redis-nøgle. Disse to kommandoer fungerer med konstant tidskompleksitet.







Derudover er GETEX-kommandoen tilgængelig til at læse strengværdier gemt på en given nøgle. Men denne kommando er også forbundet med en parallel skriveoperation. Denne vejledning vil fokusere på GETEX-kommandosyntaksen, dens muligheder og brugstilfælde.



TTL af en Redis Key

Time to live-værdien (TTL) er udløbstiden for et givet stykke data. Normalt kan en TTL associeres med databaserækker. En timeout kan også indstilles med Redis-taster. Så en Redis-klient kan kontrollere de resterende sekunder, at en given nøgle vil være tilgængelig i datalageret. Redis tilbyder en TTL-kommando til at kontrollere time to live-værdien af ​​en given nøgle. Hvis der ikke er knyttet timeout til en specificeret nøgle, returnerer TTL-kommandoen -1. Vi vil bruge TTL-kommandoen i de næste afsnit til at kontrollere den resterende tid af en given nøgle.



GETEX-kommandoen

Som fremhævet minder GETEX-kommandoen mere om GET-kommandoen, bortset fra at den kan bruges til at indstille en udløbstid for den angivne nøgle. Desuden kan en kommandomulighed fjerne en timeoutværdi fra en given nøgle. GETEX kommandosyntaksen er som følger:





GETEX nøgle [ EX timeout_in_seconds | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-milliseconds | VEDHOLDE ]

nøgle: Dette er nøglen, der peger på en strengværdi.

Følgende valgfri argumenter kan bruges til at indstille en timeout i sekunder eller millisekunder.



EX: Dette vil indstille udløbstiden i sekunder for en given nøgle.

PX: Nøgletimeoutværdien indstilles i millisekunder.

Derudover kan vi angive en UNIX-tidsstempelværdi i sekunder eller millisekunder ved hjælp af følgende kommandoindstillinger EXAT og PXAT :

EXAT: Udløbstiden indstilles i UNIX-tidsstempelformatet, og tidsstemplet vil være i sekunder.

PXAT: Timeout for en given Redis-nøgle vil blive indstillet som et UNIX-tidsstempel i millisekunder.

VEDHOLDE: Ved at angive dette kan du fjerne time to live-værdien, der er knyttet til en specificeret nøgle.

GETEX-kommandoen returnerer værdien af ​​den angivne nøgle. Denne kommando virker kun med værdier af strengtype, men ikke hashes, lister, sorterede sæt osv. Hvis du angiver en nøgle forbundet med en ikke-strengværdi, vil kommandoen returnere en fejl. Derudover, hvis nøglen allerede er udløbet eller ikke eksisterer, vil kommandoen vende tilbage nul.

I det følgende afsnit vil vi dække den praktiske brug af GETEX-kommandoen.

Use Case — Midlertidig nulstillingslink eller generering af pinkode til adgangskodegendannelse/OTP'er

Et webhostingfirma leverer en adgangskodegendannelsesfunktion til registrerede brugere. Som en sikkerhedsforanstaltning sender de et nyt URL-link til brugeren, som udløber inden for 5 minutter. Virksomheden har brugt Redis datalager i lang tid og bruger GETEX-kommandoen til at indstille en time to live-værdi for en given bruger.

Lad os antage, at en bruger med user_id 1000 anmoder om en adgangskodegendannelse. Så gendannelses-URL'en kan gemmes ved nøglen RecoveryURL:BrugerID:1000 . Vi kan bruge SET-kommandoen til at gemme gendannelses-URL'en som følger:

sæt RecoveryURL:BrugerID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Lad os kontrollere, om strengens URL er korrekt gemt ved nøglen RecoveryURL:BrugerID:1000. Vi kan bruge GETEX-kommandoen som følger:

getex RecoveryURL:BrugerID: 1000

Outputtet af den forrige kommando er vist i følgende:

Hvis vi har brugt GET-kommandoen i stedet for GETEX-kommandoen, vil outputtet være det samme.

Lad os bruge TTL-kommandoen til at kontrollere, om en udløbstid er forbundet med denne nøgle.

Ttl RecoveryURL:BrugerID: 1000

Som forventet er -1 blevet returneret af TTL-kommandoen, hvilket betyder, at der ikke er knyttet nogen udløbstid til den angivne nøgle.

Som i dette eksempel skal hostingfirmaet indstille en 5 minutters timeout for gendannelses-URL'en. Så vi vil bruge EX kommandomulighed. Da 5 minutter er 300 sekunder, kan vi konstruere GETEX-kommandoen som følger:

getex RecoveryURL:BrugerID: 1000 EX 500

Lad os køre TTL-kommandoen et par gange for at inspicere den resterende tid, som nøglen vil eksistere i datalageret.

Som forventet er tiden faldende, og i sidste ende vil den RecoveryURL:BrugerID:1000 nøgle vil blive fjernet. Følgende er output efter 5 minutter:

-2 er blevet returneret af kommandoen, hvilket betyder, at nøglen er udløbet og slettet fra datalageret.

Nogle gange skal du muligvis fjerne timeoutværdien, der er knyttet til en given nøgle. Så PERSIST-kommandoindstillingen kan bruges til at slette en TTL-værdi relateret til en specificeret nøgle.

Lad os oprette en anden prøvenøgle og tildele en strengværdi til den. I dette tilfælde vil vi angive TTL-værdien i millisekunder ved at sende PX mulighed.

sæt KeytoTestPersist 'Dette udløber inden for 60 sekunder' PX 50.000

Dernæst vil vi kontrollere den resterende tid som følger:

Som forventet er TTL faldende. Lad os kalde GETEX-kommandoen med PERSIST-indstillingen som følger:

getex KeytoTestPersist fortsætter

Ideelt set ville dette fjerne TTL forbundet med denne nøgle. Lad os inspicere TTL for nøglen KeytoTestPersist.

TTL-kommandoen returnerede -1, hvilket betyder, at ingen TTL er forbundet med nøglen KeytoTestPersist.

Tilsvarende GETEX kommando kan bruges til at indstille udløbstiden for nøgler i UNIX tidsstempel.

Konklusion

Sammenfattende kan Redis GETEX-kommandoen bruges til at hente de strengværdier, der er gemt på en given nøgle, som GET-kommandoen gør. Den eneste forskel med GETEX-kommandoen er, at den understøtter indstilling og fjernelse af udløbstider for en given nøgle. Det understøtter flere valgfrie argumenter til at angive udløbstiden i sekunder, millisekunder og UNIX-tidsstempel sekunder eller millisekunder. Som diskuteret giver kommandoen PERSIST muligheden for at fjerne tilhørende TTL for en given nøgle. Overordnet set fungerer GETEX-kommandoen med konstant tidskompleksitet.