Redis GETEX

Redis Getex



Ang Redis ay isang key-value data store na ginagamit bilang isang in-memory cache, database, time series, stream engine, message broker, atbp. Dahil ang Redis data store ay gumagamit ng isang simpleng key-value pair format para mag-hold ng data, ito ay napaka memory mabisa. Bilang karagdagan, ang bilis ng pag-query ay napakataas na may mababang oras na kumplikado tulad ng O(1) at O(log(N)). Ang mga redis key ay maaaring maglaman ng iba't ibang istruktura ng data, gaya ng mga string, set, hash, pinagsunod-sunod na set, at mga listahan.

Karaniwan, ang GET at SET na mga utos ay ginagamit upang mag-imbak at kumuha ng mga string-type na halaga na nakaimbak sa isang ibinigay na Redis key. Ang dalawang utos na ito ay gumagana nang may patuloy na pagiging kumplikado ng oras.







Bilang karagdagan, ang utos ng GETEX ay magagamit upang basahin ang mga halaga ng string na nakaimbak sa isang ibinigay na key. Ngunit ang utos na ito ay nauugnay sa isang parallel write operation, pati na rin. Ang gabay na ito ay tumutuon sa GETEX command syntax, mga opsyon nito, at mga kaso ng paggamit.



TTL ng isang Redis Key

Ang halaga ng oras upang mabuhay (TTL) ay ang oras ng pag-expire ng isang partikular na piraso ng data. Karaniwan, ang isang TTL ay maaaring iugnay sa mga hilera ng database. Maaaring magtakda ng timeout gamit ang mga Redis key, pati na rin. Kaya, maaaring suriin ng isang Redis client ang natitirang mga segundo kung ang isang ibinigay na key ay magiging available sa data store. Nag-aalok ang Redis ng TTL command upang suriin ang oras upang mabuhay ang halaga ng isang ibinigay na key. Kung walang timeout na nauugnay sa isang tinukoy na key, ang TTL command ay nagbabalik -1. Gagamitin namin ang TTL command sa mga susunod na seksyon upang suriin ang natitirang oras ng isang ibinigay na key.



Ang GETEX Command

Tulad ng naka-highlight, ang utos ng GETEX ay mas katulad ng utos ng GET, maliban na maaari itong magamit upang magtakda ng oras ng pag-expire para sa tinukoy na susi. Higit pa rito, ang isang command na opsyon ay maaaring mag-alis ng timeout value mula sa isang ibinigay na key. Ang GETEX command syntax ay ang mga sumusunod:





susi ng GETEX [ EX timeout_in_seconds | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-milliseconds | MAGPUMILIT ]

susi: Ito ang susi na tumuturo sa isang halaga ng string.

Maaaring gamitin ang mga sumusunod na opsyonal na argumento upang magtakda ng timeout sa mga segundo o millisecond.



EX: Itatakda nito ang oras ng pag-expire sa mga segundo para sa isang ibinigay na key.

PX: Itatakda sa milliseconds ang value ng key timeout.

Bilang karagdagan, maaari naming tukuyin ang isang UNIX timestamp na halaga sa mga segundo o millisecond gamit ang mga sumusunod na opsyon sa command EXAT at PXAT :

EXAT: Ang oras ng pag-expire ay itatakda sa UNIX timestamp na format, at ang timestamp ay nasa ilang segundo.

PXAT: Ang timeout para sa isang ibinigay na Redis key ay itatakda bilang UNIX timestamp sa millisecond.

MAGPUMILIT: Sa pamamagitan ng pagtukoy dito, maaari mong alisin ang oras upang mabuhay ang halaga na nauugnay sa isang tinukoy na key.

Ibinabalik ng utos ng GETEX ang halaga ng tinukoy na susi. Gumagana lang ang command na ito sa mga value na uri ng string ngunit hindi mga hash, listahan, pinagsunod-sunod na set, atbp. Kung tutukuyin mo ang isang key na nauugnay sa isang value na hindi string, magbabalik ng error ang command. Bilang karagdagan, kung ang susi ay nag-expire na o wala na, babalik ang command wala.

Sa susunod na seksyon, tatalakayin namin ang praktikal na paggamit ng utos ng GETEX.

Use Case — Temporary Reset Link o PIN Code Generation para sa Password Recovery/OTPs

Ang isang kumpanya ng web hosting ay nagbibigay ng tampok na pagbawi ng password para sa mga nakarehistrong user. Bilang hakbang sa seguridad, nagpapadala sila ng bagong link ng URL sa user, na mag-e-expire sa loob ng 5 minuto. Ang kumpanya ay gumagamit ng Redis data store sa loob ng mahabang panahon at ginagamit ang GETEX command upang magtakda ng oras upang mabuhay ang halaga para sa isang partikular na user.

Ipagpalagay natin na ang isang user na may user_id 1000 ay humihiling ng pagbawi ng password. Kaya, ang URL ng pagbawi ay maaaring maimbak sa susi RecoveryURL:UserID:1000 . Magagamit namin ang utos ng SET upang iimbak ang URL ng pagbawi tulad ng sumusunod:

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

Suriin natin kung ang string URL ay maayos na nakaimbak sa key RecoveryURL:UserID:1000. Maaari naming gamitin ang utos na GETEX tulad ng sumusunod:

getex RecoveryURL:UserID: 1000

Ang output ng nakaraang command ay ipinapakita sa sumusunod:

Kung ginamit natin ang GET command sa halip na ang GETEX command, ang output ay magiging pareho.

Gamitin natin ang utos ng TTL upang suriin kung nauugnay ang oras ng pag-expire sa key na ito.

Ttl RecoveryURL:UserID: 1000

Tulad ng inaasahan, ang -1 ay ibinalik ng TTL command, na nangangahulugang walang expiry time ang nauugnay sa tinukoy na key.

Alinsunod sa halimbawang ito, kailangang magtakda ng 5 minutong timeout ang hosting company para sa recovery URL. Kaya, gagamitin namin ang EX opsyon sa command. Dahil ang 5 minuto ay 300 segundo, maaari naming gawin ang utos na GETEX tulad ng sumusunod:

getex RecoveryURL:UserID: 1000 EX 500

Patakbuhin natin ang TTL command nang ilang beses upang siyasatin ang natitirang oras na ang susi ay iiral sa data store.

Gaya ng inaasahan, lumiliit ang oras, at kalaunan, ang RecoveryURL:UserID:1000 aalisin ang susi. Ang sumusunod ay ang output pagkatapos ng 5 minuto:

Ang -2 ay naibalik sa pamamagitan ng utos, na nangangahulugan na ang susi ay nag-expire at tinanggal mula sa data store.

Minsan, maaaring kailanganin mong alisin ang value ng timeout na nauugnay sa isang ibinigay na key. Kaya, ang PERSIST command na opsyon ay maaaring gamitin upang tanggalin ang isang TTL value na nauugnay sa isang tinukoy na key.

Gumawa tayo ng isa pang sample key at magtalaga ng string value dito. Sa kasong ito, tutukuyin namin ang halaga ng TTL sa millisecond sa pamamagitan ng pagpasa sa PX opsyon.

itakda KeytoTestPersist 'Mag-e-expire ito sa loob ng 60 segundo' PX 50000

Susunod, susuriin namin ang natitirang oras tulad ng sumusunod:

Gaya ng inaasahan, bumababa ang TTL. Tawagan natin ang utos ng GETEX na may opsyon na PERSIST tulad ng sumusunod:

nagpapatuloy ang getex KeytoTestPersist

Sa isip, aalisin nito ang TTL na nauugnay sa key na ito. Suriin natin ang TTL para sa susi KeytoTestPersist.

Ibinalik ng utos ng TTL ang -1, na nangangahulugang walang TTL na nauugnay sa susi KeytoTestPersist.

Katulad nito, ang GETEX Maaaring gamitin ang command upang itakda ang oras ng pag-expire para sa mga susi sa timestamp ng UNIX.

Konklusyon

Sa buod, ang Redis GETEX na utos ay maaaring gamitin upang kunin ang mga halaga ng string na nakaimbak sa isang ibinigay na susi tulad ng ginagawa ng GET na utos. Ang pagkakaiba lamang sa utos ng GETEX ay sinusuportahan nito ang pagtatakda at pag-alis ng mga oras ng pag-expire para sa isang ibinigay na susi. Sinusuportahan nito ang ilang mga opsyonal na argumento upang tukuyin ang oras ng pag-expire sa mga segundo, millisecond, at UNIX-timestamp na mga segundo o millisecond. Gaya ng tinalakay, ang command ay nagbibigay ng PERSIST na opsyon upang alisin ang nauugnay na TTL para sa isang ibinigay na key. Sa pangkalahatan, ang utos ng GETEX ay gumagana nang may patuloy na pagiging kumplikado ng oras.