Redis GETEX

Redis Getex



Redis je úložiště dat klíč-hodnota používané jako mezipaměť v paměti, databáze, časové řady, streamovací modul, zprostředkovatel zpráv atd. Vzhledem k tomu, že úložiště dat Redis používá k uchovávání dat jednoduchý formát páru klíč-hodnota, je velmi paměť účinný. Kromě toho je rychlost dotazování velmi vysoká s nízkou časovou složitostí, jako je O(1) a O(log(N)). Klíče Redis mohou obsahovat různé datové struktury, jako jsou řetězce, sady, hash, tříděné sady a seznamy.

Obvykle se příkazy GET a SET používají k ukládání a načítání hodnot typu řetězec uložených v daném klíči Redis. Tyto dva příkazy pracují s konstantní časovou složitostí.







Kromě toho je k dispozici příkaz GETEX pro čtení hodnot řetězců uložených na daném klíči. Ale tento příkaz je také spojen s operací paralelního zápisu. Tato příručka se zaměří na syntaxi příkazu GETEX, jeho možnosti a případy použití.



TTL klíče Redis

Hodnota time to live (TTL) je doba expirace daného kusu dat. Obvykle může být TTL spojen s řádky databáze. Časový limit lze nastavit také pomocí kláves Redis. Klient Redis tak může zkontrolovat zbývající sekundy, kdy bude daný klíč dostupný v datovém úložišti. Redis nabízí příkaz TTL pro kontrolu doby do živé hodnoty daného klíče. Pokud není k zadanému klíči přidružen žádný časový limit, příkaz TTL vrátí hodnotu -1. Pro kontrolu zbývajícího času daného klíče použijeme v dalších částech příkaz TTL.



Příkaz GETEX

Jak bylo zvýrazněno, příkaz GETEX je více podobný příkazu GET, kromě toho, že jej lze použít k nastavení doby vypršení platnosti zadaného klíče. Kromě toho může volba příkazu odstranit hodnotu časového limitu z daného klíče. Syntaxe příkazu GETEX je následující:





GETEX klíč [ EX timeout_in_seconds | PX timeout_in_miliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-miliseconds | PŘEtrvávat ]

klíč: Toto je klíč, který ukazuje na hodnotu řetězce.

Následující volitelné argumenty lze použít k nastavení časového limitu v sekundách nebo milisekundách.



EX: Tím se nastaví doba vypršení platnosti v sekundách pro daný klíč.

PX: Hodnota časového limitu klíče bude nastavena v milisekundách.

Kromě toho můžeme pomocí následujících možností příkazu zadat hodnotu časového razítka UNIX v sekundách nebo milisekundách EXAT a PXAT :

EXAT: Doba vypršení platnosti bude nastavena ve formátu časového razítka UNIX a časové razítko bude v sekundách.

PXAT: Časový limit pro daný klíč Redis bude nastaven jako časové razítko UNIX v milisekundách.

PŘETRVÁT: Zadáte-li toto, můžete odstranit hodnotu doby do života spojenou se zadaným klíčem.

Příkaz GETEX vrací hodnotu zadaného klíče. Tento příkaz pracuje pouze s hodnotami typu řetězec, ale ne s hodnotami hash, seznamy, seřazenými sadami atd. Pokud zadáte klíč spojený s jinou než řetězcovou hodnotou, příkaz vrátí chybu. Pokud navíc platnost klíče již vypršela nebo neexistuje, příkaz se vrátí nula.

V následující části se budeme věnovat praktickému použití příkazu GETEX.

Use Case — Dočasný reset odkazu nebo generování PIN kódu pro obnovu hesla/OTP

Webhostingová společnost poskytuje registrovaným uživatelům funkci obnovení hesla. Jako bezpečnostní opatření pošlou uživateli nový URL odkaz, jehož platnost do 5 minut vyprší. Společnost již delší dobu používá datové úložiště Redis a pomocí příkazu GETEX nastavuje hodnotu doby do života pro daného uživatele.

Předpokládejme, že uživatel s user_id 1000 požaduje obnovení hesla. Adresu URL pro obnovení lze tedy uložit do klíče RecoveryURL:UserID:1000 . K uložení adresy URL pro obnovení můžeme použít příkaz SET:

soubor RecoveryURL:UserID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Pojďme zkontrolovat, zda je adresa URL řetězce správně uložena v klíči RecoveryURL:UserID:1000. Příkaz GETEX můžeme použít následovně:

getex RecoveryURL:UserID: 1000

Výstup předchozího příkazu je zobrazen následovně:

Pokud jsme místo příkazu GETEX použili příkaz GET, výstup bude stejný.

Použijme příkaz TTL ke kontrole, zda je s tímto klíčem spojena doba vypršení platnosti.

Ttl RecoveryURL:UserID: 1000

Jak se očekávalo, příkaz TTL vrátil hodnotu -1, což znamená, že se zadaným klíčem není spojen žádný čas vypršení platnosti.

Podle tohoto příkladu musí hostitelská společnost nastavit 5minutový časový limit pro adresu URL pro obnovení. Budeme tedy používat EX možnost příkazu. Protože 5 minut je 300 sekund, můžeme sestavit příkaz GETEX následovně:

getex RecoveryURL:UserID: 1000 EX 500

Spusťte příkaz TTL několikrát, abychom zkontrolovali zbývající dobu, po kterou bude klíč existovat v úložišti dat.

Jak se dalo očekávat, čas se zkracuje a nakonec i RecoveryURL:UserID:1000 klíč bude odstraněn. Po 5 minutách je výstup následující:

Příkaz vrátil -2, což znamená, že platnost klíče vypršela a byl odstraněn z úložiště dat.

Někdy může být nutné odstranit hodnotu časového limitu přidruženou k danému klíči. Možnost příkazu PERSIST lze tedy použít k odstranění hodnoty TTL související se zadaným klíčem.

Vytvoříme další ukázkový klíč a přiřadíme mu hodnotu řetězce. V tomto případě uvedeme hodnotu TTL v milisekundách předáním PX volba.

soubor KeytoTestPersist 'Toto vyprší do 60 sekund' PX 50 000

Dále zkontrolujeme zbývající čas následovně:

Podle očekávání TTL klesá. Zavolejte příkaz GETEX s volbou PERSIST takto:

getex KeytoTestPersist persist

V ideálním případě by to odstranilo TTL spojené s tímto klíčem. Pojďme zkontrolovat TTL pro klíč KeytoTestPersist.

Příkaz TTL vrátil hodnotu -1, což znamená, že ke klíči není přidružen žádný TTL KeytoTestPersist.

Podobně, GETEX příkaz lze použít k nastavení doby vypršení platnosti klíčů v UNIX timestamp.

Závěr

Stručně řečeno, příkaz Redis GETEX lze použít k načtení hodnot řetězců uložených v daném klíči stejně jako příkaz GET. Jediný rozdíl oproti příkazu GETEX je v tom, že podporuje nastavení a odstranění časů vypršení platnosti pro daný klíč. Podporuje několik volitelných argumentů pro určení doby vypršení platnosti v sekundách, milisekundách a sekundy nebo milisekundy časové značky UNIX. Jak bylo uvedeno, příkaz poskytuje možnost PERSIST pro odstranění souvisejícího TTL pro daný klíč. Celkově příkaz GETEX pracuje s konstantní časovou složitostí.