Vanligvis brukes GET- og SET-kommandoene til å lagre og hente strengtypeverdier lagret ved en gitt Redis-nøkkel. Disse to kommandoene opererer med konstant tidskompleksitet.
I tillegg er GETEX-kommandoen tilgjengelig for å lese strengverdier som er lagret på en gitt nøkkel. Men denne kommandoen er også assosiert med en parallell skriveoperasjon. Denne veiledningen vil fokusere på GETEX-kommandosyntaksen, dens alternativer og brukstilfeller.
TTL av en Redis Key
Time to live (TTL)-verdien er utløpstiden til et gitt datastykke. Vanligvis kan en TTL assosieres med databaserader. En timeout kan også settes med Redis-tastene. Så en Redis-klient kan sjekke de gjenværende sekundene at en gitt nøkkel vil være tilgjengelig i datalageret. Redis tilbyr en TTL-kommando for å sjekke time to live-verdien for en gitt nøkkel. Hvis ingen tidsavbrudd er knyttet til en spesifisert nøkkel, returnerer TTL-kommandoen -1. Vi vil bruke TTL-kommandoen i de neste avsnittene for å sjekke gjenværende tid for en gitt nøkkel.
GETEX-kommandoen
Som fremhevet er GETEX-kommandoen mer lik GET-kommandoen, bortsett fra at den kan brukes til å angi en utløpstid for den angitte nøkkelen. Videre kan et kommandoalternativ fjerne en tidsavbruddsverdi fra en gitt nøkkel. Syntaksen for GETEX-kommandoen er som følger:
GETEX-nøkkel [ EX timeout_in_seconds | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-milliseconds | FORTSETTE ]
nøkkel: Dette er nøkkelen som peker til en strengverdi.
Følgende valgfrie argumenter kan brukes til å angi en tidsavbrudd i sekunder eller millisekunder.
EX: Dette vil angi utløpstiden i sekunder for en gitt nøkkel.
PX: Nøkkeltidsavbruddsverdien settes i millisekunder.
I tillegg kan vi spesifisere en UNIX-tidsstempelverdi i sekunder eller millisekunder ved å bruke følgende kommandoalternativer EXAT og PXAT :
EXAT: Utløpstiden vil bli satt i UNIX-tidsstempelformatet, og tidsstemplet vil være i sekunder.
PXAT: Tidsavbruddet for en gitt Redis-nøkkel vil bli satt som et UNIX-tidsstempel i millisekunder.
FORTSETTE: Ved å spesifisere dette kan du fjerne time to live-verdien knyttet til en spesifisert nøkkel.
GETEX-kommandoen returnerer verdien til den angitte nøkkelen. Denne kommandoen fungerer bare med strengtypeverdier, men ikke hasher, lister, sorterte sett osv. Hvis du angir en nøkkel knyttet til en ikke-strengverdi, vil kommandoen returnere en feil. I tillegg, hvis nøkkelen allerede er utløpt eller ikke eksisterer, kommer kommandoen tilbake null.
I den følgende delen vil vi dekke den praktiske bruken av GETEX-kommandoen.
Brukstilfelle — Midlertidig tilbakestillingskobling eller generering av PIN-kode for passordgjenoppretting/OTP-er
Et webhotell tilbyr en funksjon for gjenoppretting av passord for registrerte brukere. Som et sikkerhetstiltak sender de en ny URL-lenke til brukeren, som utløper innen 5 minutter. Selskapet har brukt Redis-datalageret i lang tid og bruker GETEX-kommandoen til å sette en time to live-verdi for en gitt bruker.
La oss anta at en bruker med user_id 1000 ber om passordgjenoppretting. Så gjenopprettings-URLen kan lagres ved nøkkelen GjenopprettingsURL:BrukerID:1000 . Vi kan bruke SET-kommandoen til å lagre gjenopprettings-URLen som følger:
sett RecoveryURL:BrukerID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'La oss sjekke om strengens URL er riktig lagret ved nøkkelen GjenopprettingsURL:BrukerID:1000. Vi kan bruke GETEX-kommandoen som følger:
getex RecoveryURL:BrukerID: 1000Utdataene fra forrige kommando vises i følgende:
Hvis vi har brukt GET-kommandoen i stedet for GETEX-kommandoen, vil utgangen være den samme.
La oss bruke TTL-kommandoen for å sjekke om en utløpstid er knyttet til denne nøkkelen.
Ttl RecoveryURL:BrukerID: 1000
Som forventet har -1 blitt returnert av TTL-kommandoen, noe som betyr at ingen utløpstid er knyttet til den angitte nøkkelen.
I henhold til dette eksemplet må vertsselskapet angi en tidsavbrudd på 5 minutter for gjenopprettings-URLen. Så vi vil bruke EX kommandoalternativ. Siden 5 minutter er 300 sekunder, kan vi konstruere GETEX-kommandoen som følger:
getex RecoveryURL:BrukerID: 1000 EX 500La oss kjøre TTL-kommandoen noen ganger for å inspisere den gjenværende tiden nøkkelen vil eksistere i datalageret.
Som forventet synker tiden, og til slutt GjenopprettingsURL:BrukerID:1000 nøkkel vil bli fjernet. Følgende er utgangen etter 5 minutter:
-2 har blitt returnert av kommandoen, som betyr at nøkkelen er utløpt og slettet fra datalageret.
Noen ganger må du kanskje fjerne tidsavbruddsverdien knyttet til en gitt nøkkel. Så, PERSIST-kommandoalternativet kan brukes til å slette en TTL-verdi relatert til en spesifisert nøkkel.
La oss lage en annen eksempelnøkkel og tilordne en strengverdi til den. I dette tilfellet vil vi spesifisere TTL-verdien i millisekunder ved å sende PX alternativ.
sett KeytoTestPersist 'Dette vil utløpe innen 60 sekunder' PX 50 000Deretter vil vi sjekke gjenværende tid som følger:
Som forventet synker TTL. La oss kalle GETEX-kommandoen med PERSIST-alternativet som følger:
getex KeytoTestPersist vedvarerIdeelt sett ville dette fjerne TTL knyttet til denne nøkkelen. La oss inspisere TTL for nøkkelen KeytoTestPersist.
TTL-kommandoen returnerte -1, som betyr at ingen TTL er knyttet til nøkkelen KeytoTestPersist.
På samme måte GETEX kommandoen kan brukes til å angi utløpstiden for nøkler i UNIX-tidsstempel.
Konklusjon
Oppsummert kan Redis GETEX-kommandoen brukes til å hente strengverdiene som er lagret på en gitt nøkkel, slik GET-kommandoen gjør. Den eneste forskjellen med GETEX-kommandoen er at den støtter innstilling og fjerning av utløpstider for en gitt nøkkel. Den støtter flere valgfrie argumenter for å spesifisere utløpstiden i sekunder, millisekunder og UNIX-tidsstempel sekunder eller millisekunder. Som diskutert gir kommandoen PERSIST-alternativet for å fjerne tilhørende TTL for en gitt nøkkel. Totalt sett opererer GETEX-kommandoen med konstant tidskompleksitet.