Redis GETEX

Redis Getex



Redis е хранилище на данни ключ-стойност, използвано като кеш в паметта, база данни, времеви редове, машина за потоци, брокер на съобщения и т.н. Тъй като хранилището на данни Redis използва прост формат на двойка ключ-стойност за съхранение на данни, то е много памет ефикасен. В допълнение, скоростта на заявките е много висока с ниска времева сложност като O(1) и O(log(N)). Ключовете на Redis могат да съдържат различни структури от данни, като низове, набори, хешове, сортирани набори и списъци.

Обикновено командите GET и SET се използват за съхраняване и извличане на стойности от тип низ, съхранени в даден ключ на Redis. Тези две команди работят с постоянна времева сложност.







В допълнение, командата GETEX е достъпна за четене на низови стойности, съхранени в даден ключ. Но тази команда е свързана и с паралелна операция за запис. Това ръководство ще се съсредоточи върху синтаксиса на командата GETEX, нейните опции и случаи на употреба.



TTL на Redis ключ

Стойността на времето за живот (TTL) е времето на изтичане на дадена част от данните. Обикновено TTL може да бъде свързан с редове в базата данни. Времето за изчакване може да се зададе и с клавишите на Redis. Така клиент на Redis може да провери оставащите секунди, през които даден ключ ще бъде наличен в хранилището на данни. Redis предлага TTL команда за проверка на стойността на времето за живеене на даден ключ. Ако няма време за изчакване, свързано с определен ключ, командата TTL връща -1. Ще използваме командата TTL в следващите раздели, за да проверим оставащото време на даден клавиш.



Командата GETEX

Както беше подчертано, командата GETEX е по-подобна на командата GET, с изключение на това, че може да се използва за задаване на време за изтичане на посочения ключ. Освен това, опция за команда може да премахне стойност за изчакване от даден ключ. Синтаксисът на командата GETEX е както следва:





Ключ GETEX [ EX изчакване_в_секунди | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-време-милисекунди | УПОРСТВАМ ]

ключ: Това е ключът, който сочи към низова стойност.

Следните незадължителни аргументи могат да се използват за задаване на време за изчакване в секунди или милисекунди.



ПРИМЕР: Това ще зададе времето на изтичане в секунди за даден ключ.

PX: Стойността на времето за изчакване на ключа ще бъде зададена в милисекунди.

Освен това можем да посочим стойност на UNIX времево клеймо в секунди или милисекунди, като използваме следните командни опции EXAT и PXAT :

EXAT: Времето на изтичане ще бъде зададено във формата на клеймо за време на UNIX, а клеймото ще бъде в секунди.

PXAT: Времето за изчакване за даден Redis ключ ще бъде зададено като времево клеймо на UNIX в милисекунди.

УПОРСТВАМ: Като посочите това, можете да премахнете стойността на времето на живот, свързана с определен ключ.

Командата GETEX връща стойността на посочения ключ. Тази команда работи само със стойности от тип низ, но не и с хешове, списъци, сортирани набори и т.н. Ако посочите ключ, свързан със стойност, която не е низ, командата ще върне грешка. Освен това, ако ключът вече е изтекъл или не съществува, командата ще се върне нула.

В следващия раздел ще разгледаме практическото използване на командата GETEX.

Случай на употреба — Връзка за временно нулиране или генериране на PIN код за възстановяване на парола/OTP

Компания за уеб хостинг предоставя функция за възстановяване на парола за регистрирани потребители. Като мярка за сигурност те изпращат нова URL връзка на потребителя, която ще изтече в рамките на 5 минути. Компанията използва хранилището на данни Redis от дълго време и използва командата GETEX, за да зададе стойност на времето за активиране за даден потребител.

Да приемем, че потребител с user_id 1000 поиска възстановяване на парола. Така че URL адресът за възстановяване може да се съхранява в ключа URL адрес за възстановяване: UserID: 1000 . Можем да използваме командата SET, за да съхраним URL адреса за възстановяване, както следва:

комплект URL адрес за възстановяване: UserID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Нека проверим дали URL адресът на низа е правилно съхранен в ключа URL адрес за възстановяване: UserID: 1000. Можем да използваме командата GETEX, както следва:

getex RecoveryURL:UserID: 1000

Резултатът от предишната команда е показан в следното:

Ако сме използвали командата GET вместо командата GETEX, изходът ще бъде същият.

Нека използваме командата TTL, за да проверим дали времето на изтичане е свързано с този ключ.

Ttl RecoveryURL:UserID: 1000

Както се очакваше, -1 беше върнат от командата TTL, което означава, че не е свързано време на изтичане с посочения ключ.

Според този пример, хостинг компанията трябва да зададе 5 минути таймаут за URL адреса за възстановяване. Така че ще използваме EX командна опция. Тъй като 5 минути са 300 секунди, можем да конструираме командата GETEX, както следва:

getex RecoveryURL:UserID: 1000 EX 500

Нека изпълним командата TTL няколко пъти, за да проверим оставащото време, през което ключът ще съществува в хранилището на данни.

Както се очакваше, времето намалява и в крайна сметка URL адрес за възстановяване: UserID: 1000 ключът ще бъде премахнат. Следното е резултатът след 5 минути:

-2 е върнат от командата, което означава, че ключът е изтекъл и е изтрит от хранилището на данни.

Понякога може да се наложи да премахнете стойността за изчакване, свързана с даден ключ. И така, командата PERSIST може да се използва за изтриване на TTL стойност, свързана с определен ключ.

Нека създадем друг примерен ключ и да му присвоим стойност на низ. В този случай ще посочим TTL стойността в милисекунди, като подадем PX опция.

комплект KeytoTestPersist „Това ще изтече след 60 секунди“ PX 50 000

След това ще проверим оставащото време, както следва:

Както се очаква, TTL намалява. Нека извикаме командата GETEX с опцията PERSIST, както следва:

getex KeytoTestPersist продължава

В идеалния случай това ще премахне TTL, свързан с този ключ. Нека проверим TTL за ключа KeytoTestPersist.

Командата TTL върна -1, което означава, че TTL не е свързан с ключа KeytoTestPersist.

По същия начин, GETEX командата може да се използва за задаване на времето за изтичане на ключовете в UNIX timestamp.

Заключение

В обобщение, командата GETEX на Redis може да се използва за извличане на низовите стойности, съхранени в даден ключ, както прави командата GET. Единствената разлика с командата GETEX е, че поддържа задаване и премахване на времена на изтичане за даден ключ. Той поддържа няколко незадължителни аргумента за указване на времето на изтичане в секунди, милисекунди и UNIX-timestamp секунди или милисекунди. Както беше обсъдено, командата предоставя опцията PERSIST за премахване на свързания TTL за даден ключ. Като цяло командата GETEX работи с постоянна времева сложност.