Redis EXPIRE Hash Key

Redis Expire Hash Key



Redis-tiiviste on erityinen tietotyyppi, joka muistuttaa paljon enemmän JSON-objektia, Java HashMapia tai Python-sanakirjaa. Lisäksi se on kokoelma kenttä-arvopareja, joita voidaan käyttää toimialueen objektien mallintamiseen. Redisin hajautustietorakenne on erittäin muistitehokas, jossa jokainen hash-avain voi tallentaa jopa neljä miljardia kenttäarvoparia. Mikä tärkeintä, perushajautustoiminnot, kuten HSET, HGET, HMGET jne., toimivat vakioaikaisesti.


Redis-hajautusavaimilla on ääretön aika elää (TTL), mikä tarkoittaa, että ne ovat pysyviä, ja ne poistetaan eksplisiittisesti käyttämällä komentoja, kuten DEL. Tässä artikkelissa keskitymme TTL:n asettamiseen Redis-tiivisteille käyttämällä EXPIRE-komentoa.







Redis EXPIRE -komento

EXPIRE-komentoa käytetään aikakatkaisun asettamiseen Redis-hajautuksen, -joukon, -luettelon jne. tietylle avaimelle. Redis-avain poistetaan tietokannasta, jos aikakatkaisu vanhenee. Mikä tärkeintä, aikakatkaisua ei selvitetä, kunnes avaimen sisältö poistetaan tai kirjoitetaan päälle. Avaimeen liittyvien arvojen muuttaminen ei vaikuta vanhenemisaikaan.



EXPIRE-komennon syntaksi on seuraava:



EXPIRE-avain expiry_time_seconds [ NX | GX | GT | LT ]


avain: Hash-, List- tai Set-avain, jolla sinun on asetettava aikakatkaisu.





expirty_time_seconds: Aikakatkaisun arvo sekunteina.

EXPIRE-komento hyväksyy useita valinnaisia ​​argumentteja.



NX: Aikakatkaisuarvo asetetaan vain, jos määritetyllä avaimella ei ole jo voimassaoloaikaa.

XX: Kun määritetyllä avaimella on olemassa oleva aikakatkaisuarvo, uusi voimassaoloaika asetetaan.

GT: Jos uusi aikakatkaisuarvo on suurempi kuin nykyinen, uusi vanheneminen asetetaan.

LT: Uusi aikakatkaisuarvo asetetaan, jos olemassa oleva on suurempi kuin uusi.

Mikä tärkeintä, EXPIRE-komento toimii jatkuvalla aikamonimutkaisuudella. Kokonaisluku 1 palautetaan, jos komennon suoritus onnistuu. Jos toiminto epäonnistuu väärien argumenttien tai olemattomien avainten vuoksi, palautetaan 0.

Käytämme tiivisteissä EXPIRE-komentoa vanhenemisajan asettamiseen seuraavassa osiossa esitetyllä tavalla:

Expire Redis Hash käyttämällä EXPIRE-komentoa

Oletetaan, että istuntotiedot käyttäjää kohden on tallennettu Redis-tiivisteeseen session:id:1000:user:10. Voimme käyttää HMSET-komentoa luodaksesi Redis-hajautusarvon, jossa on useita kenttäarvopareja seuraavasti:

hmset session:id: 1000 :user: 10 käyttäjätunnus 'jae' evästeen 'Joo' Salasana '389Ysu2'


Tarkastellaan luotua tiivistettä HGETALL-komennolla.

hgetall session:id: 1000 :user: 10



Lisäksi istunto vanhenee 10 sekunnin kuluttua, jos käyttäjä on käyttämättömänä yli 60 sekuntia. Istunnon vanheneminen saavutetaan asettamalla vanhenemisaika istuntotiedot tallentavalle hashille.

Voimme käyttää EXPIRE-komentoa seuraavasti:

päättyy istunto:id: 1000 :user: 10 10


Kuten mainittiin, aikakatkaisuarvo on asetettu 10 sekuntiin.


Kuten odotettiin, palautusarvo on 1, mikä tarkoittaa, että TTL on asetettu onnistuneesti hashille. Katsotaanpa jäljellä oleva aika ennen kuin hash-avain poistetaan Redis-kaupasta. TTL-komentoa voidaan käyttää seuraavasti:

ttl-istunto:id: 1000 :user: 10



Kuten tulosteessa näkyy, kolme sekuntia on jäljellä ennen kuin tiiviste poistetaan automaattisesti. 10 sekunnin kuluttua TTL-komennon tulos on seuraava:


Koska -2 kokonaislukuvastaus on ilmoitettu, tiivistettä ei ole olemassa.

Aseta aikakatkaisu voimassaolon päättymisajan perusteella

EXPIRE-komento hyväksyy NX- ja XX-argumentit asettaakseen uuden aikakatkaisun tietyn tiivisteen vanhenemisen perusteella. Luodaan uusi hash kanssa noTimeOut avain .

hmset noTimeOut nimi 'testata'


Yritetään asettaa uusi voimassaoloaika edelliselle hashille. Lisäksi välitämme argumentin XX myös EXPIRE-komennolle.

päättyy noTimeOut viisitoista XX


Koska määritämme XX -vaihtoehto komennossa, vanhenemisaikaa ei aseteta. XX-vaihtoehto ei salli uuden vanhenemisajan asettamista, jos määritettyyn hash-avaimeen ei ole liitetty aikakatkaisua.


Jos käytämme NX vaihtoehdon aikakatkaisuarvoksi on asetettu 15.

päättyy noTimeOut viisitoista NX



EXPIRE-komento palauttaa kokonaisluvun 1 vastauksen, mikä tarkoittaa, että aikakatkaisu on asetettu oikein.

Aseta aikakatkaisu nykyisen aikakatkaisuarvon perusteella

GT- ja LT-vaihtoehtoja voidaan käyttää hajautusajan vanhenemisajan asettamiseen nykyisen aikakatkaisun pituuden perusteella.

Luodaan uusi hash nimeltä hashWithTimeout.

hmset hashWithTimeout field1 arvo1


Seuraavaksi asetimme tiivisteelle 200 sekunnin vanhenemisajan.

expire hashWithTimeout 200


Yritetään asettaa uusi 100 sekunnin aikakatkaisu hashille yhdessä GT-vaihtoehdon kanssa seuraavasti:

expire hashWithTimeout 100 GT


Koska GT-vaihtoehto on määritetty, EXPIRE-komento tarkistaa, onko uusi aikakatkaisuarvo suurempi kuin nykyinen, ja asettaa uuden vanhenemisajan. Tässä esimerkissä uusi aikakatkaisu ei ole suurempi kuin nykyinen aikakatkaisu. Tästä syystä komento ei aseta uutta vanhenemisaikaa ja 0 palautetaan.


Käytetään LT-vaihtoehtoa GT:n sijaan. Koska uusi vanhenemisaika on lyhyempi kuin nykyinen, seuraavan komennon pitäisi asettaa uusi aikakatkaisu onnistuneesti.

expire hashWithTimeout 100 LT


Johtopäätös

Lyhyesti sanottuna Redis EXPIRE -komentoa käytetään määrittämään TTL-arvo tietylle avaimelle. Oletuksena Redis-hajautusavaimet eivät liity mihinkään aikakatkaisuun, jota kutsutaan haihtumattomaksi. Kuten mainittiin, EXPIRE-komentoa käytetään aikakatkaisuarvon asettamiseen Redis-tiivisteelle. Yleensä tiiviste poistetaan Redis-tietovarastosta aikakatkaisuarvoksi määritetyn ajan kuluttua. Kuten esimerkeissä näkyy, EXPIRE-komento hyväksyy joitain valinnaisia ​​argumentteja, kuten XX, NX, GT ja LT asettaakseen hashin vanhenemisen ehdon perusteella.