Redis EXPIRE хеш ключ

Redis Expire Hes Kluc



Хешовете на Redis са специален вид тип данни, който е много по-подобен на обект JSON, Java HashMap или речник на Python. Освен това, това е колекция от двойки поле-стойност, които могат да се използват за моделиране на обекти на домейн. Хеш структурата на данните на Redis е изключително ефективна за паметта, където всеки хеш ключ може да съхранява до четири милиарда двойки поле-стойност. Най-важното е, че фундаменталните хеш операции като HSET, HGET, HMGET и т.н. работят с постоянна времева сложност.


Хеш ключовете на Redis имат безкрайно време за живот (TTL), което означава, че са постоянни и се изтриват изрично с помощта на команди като DEL. В тази статия ще се съсредоточим върху настройката на TTL за Redis хешовете с помощта на командата EXPIRE.







Команда Redis EXPIRE

Командата EXPIRE се използва за задаване на таймаут на даден ключ на Redis хеш, набор, списък и т.н. Ключът Redis се изтрива от базата данни, ако времето за изчакване изтече. Най-важното е, че времето за изчакване е неизчистено, докато съдържанието на ключа не бъде изтрито или презаписано. Промяната на стойностите, свързани с ключ, не засяга времето на изтичане.



Синтаксисът на командата EXPIRE е както следва:



EXPIRE ключ expiry_time_seconds [ NX | GX | GT | LT ]


ключ: Ключът на хеша, списъка или набора, който трябва да зададете изчакване.





expirity_time_seconds: Стойността на времето за изчакване в секунди.

Няколко незадължителни аргумента се приемат от командата EXPIRE.



NX: Стойността за изчакване се задава само ако посоченият ключ вече няма изтекъл срок.

XX: Когато указаният ключ има съществуваща стойност за изчакване, се задава новото изтичане.

GT: Ако новата стойност на изчакване е по-голяма от съществуващата, се задава новото изтичане.

LT: Новата стойност на изчакване се задава, ако съществуващата е по-голяма от новата.

Най-важното е, че командата EXPIRE работи с постоянна времева сложност. Цялото число 1 се връща, ако изпълнението на командата е успешно. Ако операцията е неуспешна поради грешни аргументи или несъществуващи ключове, се връща 0.

Ще използваме командата EXPIRE за хешовете, за да зададем време на изтичане, както е показано в следния раздел:

Изтичане на Redis Hash с помощта на командата EXPIRE

Да приемем, че информацията за сесията на потребител се съхранява в Redis хеш сесия:id:1000:потребител:10. Можем да използваме командата HMSET, за да създадем Redis хеш с множество двойки поле-стойност, както следва:

hmset сесия:id: 1000 :потребител: 10 потребителско име 'джае' бисквитка 'да' парола '389Ysu2'


Нека проверим създадения хеш с помощта на командата HGETALL.

hgetall сесия:id: 1000 :потребител: 10



В допълнение, сесията изтича след 10 секунди, ако потребителят е неактивен повече от 60 секунди. Изтичането на сесията се постига чрез задаване на времето за изтичане на хеша, който съхранява информацията за сесията.

Можем да използваме командата EXPIRE, както следва:

сесията изтича:id: 1000 :потребител: 10 10


Както споменахме, стойността на времето за изчакване е зададена на 10 секунди.


Както се очаква, върнатата стойност е 1, което означава, че TTL е зададен успешно за хеша. Нека проверим оставащото време преди хеш ключът да бъде премахнат от магазина на Redis. Командата TTL може да се използва както следва:

ttl сесия:id: 1000 :потребител: 10



Както е показано в изхода, остават три секунди преди автоматичното премахване на хеша. След 10 секунди изходът на TTL командата е както следва:


Тъй като отговорът с цяло число -2 е посочен, хешът не съществува.

Задаване на време за изчакване въз основа на съществуването на време на изтичане

Командата EXPIRE приема аргументи NX и XX, за да зададе ново време за изчакване въз основа на съществуването на изтичане за определен хеш. Нека създадем нов хеш с noTimeOut ключ .

hmset noTimeOut име 'тест'


Нека се опитаме да зададем ново изтичане на предишния хеш. Освен това предаваме аргумента XX на командата EXPIRE.

изтече noTimeOut петнадесет XX


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


Ако използваме NX опция, стойността на изчакване е зададена на 15.

изтече noTimeOut петнадесет NX



Командата EXPIRE връща цяло число 1 отговор, което означава, че времето за изчакване е зададено правилно.

Задайте изчакване въз основа на съществуващата стойност на изчакване

Опциите GT и LT могат да се използват за задаване на времето за изтичане на хеша въз основа на съществуващата продължителност на изчакване.

Нека създадем нов хеш, наречен hashWithTimeout.

hmset hashWithTimeout поле1 стойност1


След това задаваме време за изтичане на хеша от 200 секунди.

изтича hashWithTimeout 200


Нека се опитаме да зададем ново изчакване от 100 секунди за хеша заедно с опцията GT, както следва:

изтича hashWithTimeout 100 GT


Тъй като опцията GT е посочена, командата EXPIRE ще провери дали новата стойност на изчакване е по-голяма от съществуващата и ще зададе новото време на изтичане. В този пример новият таймаут не е по-голям от съществуващия таймаут. Следователно командата няма да зададе новото време на изтичане и ще бъде върнато 0.


Нека използваме опцията LT вместо GT. Тъй като новото време на изтичане е по-ниско от текущото, следната команда трябва успешно да зададе новия таймаут.

изтича hashWithTimeout 100 LT


Заключение

Накратко, командата Redis EXPIRE се използва за задаване на TTL стойност за даден ключ. По подразбиране хеш ключовете на Redis не са свързани с никакво време за изчакване, което се нарича енергонезависимо. Както беше обсъдено, командата EXPIRE се използва за задаване на стойност за изчакване на хеша на Redis. Обикновено хешът се изтрива от хранилището на данни на Redis след времето, посочено като стойност за изчакване. Както е показано в примерите, командата EXPIRE приема някои незадължителни аргументи като XX, NX, GT и LT, за да зададе изтичането на хеша въз основа на условие.