Redis — atmintyje veikianti talpykla svetainėms ir parduotuvėms
Redis – greičio sluoksnis už 4buildsite platformoje sukurtų svetainių, parduotuvių ir prekyviečių: atmintyje (RAM) laiko būtent tuos duomenis, kuriuos dažnai reikia pateikti – talpykloje saugomus puslapius, sesijas, krepšelius, užklausų limitus – ir atsako per mažiau nei milisekundę. Tiesos šaltinis lieka PostgreSQL; Redis jį apsaugo esant dideliam srautui. Jis įtrauktas ir valdomas platformos, be jokios tavo konfigūracijos.
Kas yra Redis ir kodėl jis toks greitas
Redis (REmote DIctionary Server) – atvirojo kodo atmintyje veikianti duomenų bazė: duomenis laiko RAM, o ne diske, todėl atsako per mažiau nei milisekundę. 4buildsite platformoje jį naudojame kaip pagreitinimo sluoksnį prieš PostgreSQL – viskam, ką dažnai reikia pateikti: puslapiams, sesijoms, krepšeliams ir užklausų limitams.
Skirtingai nei diskas, RAM yra eilėmis greitesnė, o Redis prideda natūralias duomenų struktūras (string, hash, list, set, sorted set, stream), leidžiančias sudėtingas operacijas tiesiai atmintyje, be kelionės į pagrindinę duomenų bazę ir atgal. Komandos apdorojamos vienoje gijoje (single-threaded), todėl elgesys nuspėjamas ir be race conditions.
- Tipinė delsa mažiau nei 1 ms ir daugiau nei 100 000 operacijų per sekundę viename mazge
- Natūralios struktūros: hash sesijoms, sorted set topams ir užklausų ribojimui, stream eilėms
- Komandos vykdomos viena gija → nuspėjamas elgesys, be sudėtingų blokavimų
Talpykla: tavo puslapiai ir duomenys, pateikiami iš talpyklos
Strategija – cache-aside: pirmoji užklausa skaito iš PostgreSQL ir išsaugo rezultatą Redis su TTL (gyvavimo laiku); vėlesnės užklausos jį ima tiesiai iš atminties. Kai redaguoji puslapį, raktas pašalinamas aiškiai, nelaukiant, kol baigsis TTL.
Pristatomajai svetainei ar parduotuvei tai reiškia, kad produktų sąrašai, meniu, populiarūs puslapiai ir turinio fragmentai pateikiami iš talpyklos, be kreipimosi į duomenų bazę kiekvienai užklausai. Esant pikams (kampanija, Black Friday) Redis sugeria pasikartojančias užklausas, kad jų nepatirtų PostgreSQL.
- Cache-aside su aiškiu invalidavimu redaguojant puslapį
- Talpina puslapių fragmentus ir užklausų rezultatus, ne tik ištisus puslapius
- Mažina PostgreSQL apkrovą srauto pikų metu
Sesijos, pirkinių krepšelis ir apsauga nuo piktnaudžiavimo
Naudotojų sesijos ir refresh tokenai laikomi Redis: greita autentifikacija, automatinis galiojimo pabaigimas per TTL ir atšaukimas visuose įrenginiuose, kai kas nors atsijungia ar pakeičia slaptažodį.
4buildsite platformoje sukurtų parduotuvių pirkinių krepšelis neprisijungusiems lankytojams laikomas Redis – greitai, su galiojimo pabaiga, be kreipimosi į pagrindinę duomenų bazę. Redis taip pat taiko užklausų ribojimą (rate limiting) kontaktų formoms ir prisijungimui, naudodamas sorted sets, kad sustabdytų šlamštą ir brute force bandymus dar prieš jiems pasiekiant duomenų bazę.
- Sesijų saugykla su automatiniu galiojimo pabaigimu ir selektyviu tokenų atšaukimu
- Pastovus krepšelis su TTL anoniminiams lankytojams
- Užklausų ribojimas ir apsauga nuo piktnaudžiavimo formose ir autentifikacijoje
Realus laikas ir foninių užduočių eilės
Redis Pub/Sub ir Streams maitina realaus laiko atnaujinimus: gyvai mažėjančias atsargas, pranešimą programoje, besikeičiančią užsakymo būseną – viskas be to, kad lankytojas turėtų perkrauti puslapį, ir be pasikartojančio polling, kuris vargina serverį.
Sunkios užduotys (vaizdo apdorojimas, eksporto generavimas, sinchronizavimas) patenka į Redis eilę ir vykdomos fone worker’ių, kad lankytojas negaištų laukdamas jų pabaigos. Paskirstytojo užrakinimo (locking) mechanizmas garantuoja, kad kritinė operacija nebus vykdoma du kartus.
- Pub/Sub ir Streams gyviems įvykiams (atsargos, užsakymai, pranešimai)
- Užduočių eilės sunkiam apdorojimui, vykdomam asinchroniškai
- Paskirstytasis užrakinimas operacijoms, kurios neturi būti vykdomos du kartus
Privalumai ir apribojimai
Privalumai
- Atsakymas per mažiau nei 1 ms: talpykloje esantys duomenys pateikiami be kreipimosi į duomenų bazę
- Smarkiai sumažina PostgreSQL apkrovą esant dideliam srautui
- Natūralios struktūros sesijoms, krepšeliui, užklausų ribojimui ir topams
- Pub/Sub ir Streams realaus laiko funkcijoms, be polling
- Užduočių eilės sunkiam apdorojimui
- Įtraukta ir valdoma platformos – jokios konfigūracijos tau
Apribojimai
- Duomenys laikomi RAM, kuri brangesnė už diską → netinka milžiniškiems „šaltų“ duomenų kiekiams
- Tai talpykla / pagalbinis sluoksnis, o ne tiesos šaltinis – pastovūs duomenys lieka PostgreSQL
- Pastovumas (RDB/AOF) sumažina, bet visiškai nepašalina paskutinių sekundžių praradimo rizikos po gedimo
- Reikalinga teisinga invalidavimo strategija, kitaip gali pateikti pasenusius duomenis
Trumpa išvada
Naudok Redis viskam, kam reikia greitos prieigos: talpyklai, sesijoms, krepšeliui, užklausų ribojimui, realiam laikui ir užduočių eilėms. Nenaudok jo kaip pagrindinės duomenų saugyklos; tam lieka PostgreSQL. 4buildsite platformoje turi abu, automatiškai suderintus: nieko rinktis ar konfigūruoti nereikia.
Specifikacijų lentelė
| Galimybė | Detalė | Kur naudojama konstruktoriuje |
|---|---|---|
| Delsa | < 1 ms (atmintyje) | Puslapiai ir duomenys pateikiami iš talpyklos |
| Pralaidumas | > 100 000 operacijų/s mazge | Didelis srautas, mažesnė apkrova duomenų bazei |
| Duomenų struktūros | string, hash, list, set, sorted set, stream | Sesijos, krepšelis, topai, eilės, užklausų ribojimas |
| Pastovumas | RDB momentinė kopija + AOF žurnalas | Atsigavimas po perkrovimo iš kopijos ir žurnalo |
| Galiojimo pabaiga | TTL kiekvienam raktui | Krepšelis, sesijos ir talpykla su automatiniu valymu |
| Realus laikas | Pub/Sub + Streams | Gyvos atsargos, pranešimai, užsakymo būsena |
Redis (talpykla) ir tik duomenų bazė
| Kriterijus | Su Redis | Tik PostgreSQL |
|---|---|---|
| Atsako laikas pasikartojantiems duomenims | mažiau nei 1 ms, iš atminties | dešimtys ms, užklausa kiekvieną kartą |
| Esant dideliam srautui | duomenų bazė mažiau apkraunama | duomenų bazė užsikemša, kyla timeout rizika |
| Krepšelis ir sesijos | greiti, su automatine galiojimo pabaiga | lentelės, kurios auga ir apkrauna duomenų bazę |
| Realus laikas | natūralūs Pub/Sub ir Streams | pasikartojantis polling, brangus |
| Užduočių eilės | natūralios, paprastos naudoti | improvizuoti sprendimai arba jų visai nėra |
Dažniausiai užduodami klausimai
Kas yra Redis trumpai?
Itin greita atmintyje veikianti duomenų bazė, naudojama kaip talpyklos, sesijų ir realaus laiko sluoksnis prieš pagrindinę duomenų bazę. Atsako per mažiau nei milisekundę, o pasikartojantys duomenys pateikiami iš talpyklos.
Kodėl nenaudojate vien PostgreSQL?
PostgreSQL yra tiesos šaltinis (pastovūs duomenys), tačiau Redis pasikartojančius duomenis pateikia per mažiau nei milisekundę ir perima krepšelį, sesijas, užklausų ribojimą bei realų laiką, mažindamas duomenų bazės apkrovą esant dideliam srautui. Jie dirba kartu.
Ar prarasiu duomenis, jei Redis sugenda?
Svetainės turinio – ne: pastovūs duomenys yra PostgreSQL. Redis laikomi tik talpyklos ir laikinieji duomenys, o RDB/AOF pastovumas sumažina praradimus.
Ar Redis turiu konfigūruoti pats?
Ne. Jis įtrauktas ir valdomas 4buildsite platformos; tu naudojiesi greičiu ir realaus laiko funkcijomis nieko neadministruodamas.
Kaip Redis padeda internetinei parduotuvei?
Greitas krepšelis lankytojams, talpykloje saugomi produktų sąrašai, gyvai atnaujinamos atsargos ir apsauga nuo piktnaudžiavimo atsiskaitymo metu bei formose – viskas su mažesne duomenų bazės apkrova.
Ar Redis padeda SEO ir Core Web Vitals?
Taip, netiesiogiai: trumpi atsako laikai yra vienas iš veiksnių, lemiančių TTFB ir Core Web Vitals – signalus, svarbius „Google“ ir naudotojo patirčiai.