Redis — mälusisene vahemälu saitidele ja e-poodidele
Redis on 4buildsite'is ehitatud saitide, e-poodide ja turuplatsside taga olev kiirusekiht: hoiab mälus (RAM) täpselt neid andmeid, mida tuleb koheselt serveerida — vahemällu salvestatud lehed, sessioonid, ostukorvid, kiiruspiirangud — ja vastab alla millisekundi. Tõeallikaks jääb PostgreSQL; Redis kaitseb seda suure liikluse korral. See on platvormi poolt kaasa arvatud ja hallatud, sinu poolt ilma igasuguse seadistuseta.
Mis on Redis ja miks see on nii kiire
Redis (REmote DIctionary Server) on avatud lähtekoodiga mälusisene andmebaas: hoiab andmeid RAM-is, mitte kettal, seega vastab alla millisekundi. 4buildsite'is kasutame seda kiirenduskihina PostgreSQL-i ees — kõige jaoks, mida tuleb koheselt serveerida: lehed, sessioonid, ostukorvid ja kiiruspiirangud.
Erinevalt kettast on RAM suurusjärkude võrra kiirem ning Redis lisab natiivsed andmestruktuurid (string, hash, list, set, sorted set, stream), mis võimaldavad keerukaid operatsioone otse mälus, ilma edasi-tagasi teekonnata põhiandmebaasi. Käskude töötlemine on single-threaded, seega on käitumine ettearvatav ja ilma race condition'iteta.
- Tüüpiline latentsus alla 1 ms ja üle 100 000 operatsiooni sekundis ühel sõlmel
- Natiivsed struktuurid: hash'id sessioonidele, sorted set edetabelitele ja rate limitingule, stream järjekordadele
- Käskudel single-threaded → ettearvatav käitumine, ilma keerukate blokeeringuteta
Vahemälu: sinu lehed ja andmed
Strateegia on cache-aside: esimene päring loeb PostgreSQL-ist ja salvestab tulemuse Redisesse TTL-iga (elueaga); järgmised päringud võtavad selle otse mälust. Kui lehte muudad, kustutatakse võti selgesõnaliselt — me ei serveeri kunagi aegunud andmeid pimeda TTL-i kaudu.
Esitlussaidi või e-poe jaoks tähendab see, et tootenimekirjad, menüüd, populaarsed lehed ja sisufragmendid serveeritakse andmebaasi üle koormamata. Tippudel (kampaania, Black Friday) neelab Redis korduvad päringud ja hoiab saidi kiire.
- Cache-aside selge kehtetuks tunnistamisega — ilma aegunud andmeteta
- Salvestab lehefragmente ja päringutulemusi, mitte ainult tervet lehti
- Kaitseb PostgreSQL-i liiklustippudel, vähendades vastuseaegu
Sessioonid, ostukorv ja kuritarvituste vastane kaitse
Kasutajasessioonid ja refresh tokenid asuvad Redises: autentimine, automaatne aegumine TTL-iga ja tühistamine kõigis seadmetes, kui keegi välja logib või parooli vahetab.
4buildsite'is ehitatud e-poodide ostukorv hoitakse autentimata külastajate jaoks Redises — aegumisega, põhiandmebaasi paisutamata. Samuti rakendab Redis kontaktivormidel ja sisselogimisel rate limitingut sorted set'ide abil, et peatada rämpspost ja jõhkra jõu katsed enne, kui need andmebaasini jõuavad.
- Sessioonisalvestus automaatse aegumise ja tokenite selektiivse tühistamisega
- Püsiv ostukorv TTL-iga anonüümsetele külastajatele
- Rate limiting ja kuritarvituste vastane kaitse vormidel ja autentimisel
Reaalaeg ja taustatööde järjekorrad
Redis Pub/Sub ja Streams toidavad reaalajauuendusi: laoseis, mis väheneb live'is, rakendusesisene teavitus, muutuv tellimuse staatus — kõik ilma, et külastaja peaks lehte värskendama, ja ilma korduva pollimiseta, mis serverit väsitab.
Rasked ülesanded (pildi töötlemine, ekspordi genereerimine, sünkroonimine) lähevad Redise järjekorda ja neid täidavad taustal worker'id, et külastaja ei peaks ootama ülesande lõppu. Hajutatud lukustamismehhanism tagab, et kriitiline operatsioon ei käivitu kaks korda.
- Pub/Sub ja Streams live-sündmuste jaoks (laoseis, tellimused, teavitused)
- Tööjärjekorrad rasketeks töötlusteks, mida täidetakse asünkroonselt
- Hajutatud lukustamine operatsioonidele, mis ei tohi kaks korda käivituda
Eelised ja piirangud
Eelised
- Vastus alla 1 ms: vahemällu salvestatud andmeid serveeritakse mälust
- Vähendab drastiliselt PostgreSQL-i koormust suure liikluse korral
- Natiivsed struktuurid sessioonidele, ostukorvile, rate limitingule ja edetabelitele
- Pub/Sub ja Streams reaalajafunktsioonideks, ilma pollimiseta
- Tööjärjekorrad raskeks töötluseks, külastajat blokeerimata
- Platvormi poolt kaasa arvatud ja hallatud — sinu jaoks null seadistust
Piirangud
- Andmed asuvad RAM-is, mis on kallim kui ketas → pole mõeldud tohutute „külmade“ andmemahtude jaoks
- See on vahemälu / abikiht, mitte tõeallikas — püsivad andmed jäävad PostgreSQL-i
- Püsivus (RDB/AOF) vähendab, kuid ei kõrvalda täielikult riski kaotada krahhi korral viimased sekundid
- Nõuab õiget kehtetuks tunnistamise strateegiat, vastasel juhul võib serveerida aegunud andmeid
Lühike kokkuvõte
Kasuta Redist kõige jaoks, mis peab olema kohene — vahemälu, sessioonid, ostukorv, rate limiting, reaalaeg ja tööjärjekorrad. Ära kasuta seda põhiandmehoidlana; selleks jääb PostgreSQL. 4buildsite'is on sul mõlemad, automaatselt sobitatud: sa ei pea midagi valima ega seadistama.
Spetsifikatsioonide tabel
| Võimekus | Detail | Kus ehitajas kasutatakse |
|---|---|---|
| Latentsus | < 1 ms (mälusisene) | Lehed ja andmed vahemälust |
| Läbilaskevõime | > 100 000 op/s sõlme kohta | Suur liiklus ilma andmebaasi kukkumata |
| Andmestruktuurid | string, hash, list, set, sorted set, stream | Sessioonid, ostukorv, edetabelid, järjekorrad, rate limiting |
| Püsivus | RDB snapshot + AOF-logi | Kiire taastumine pärast taaskäivitust |
| Aegumine | TTL võtme kohta | Ostukorv, sessioonid ja vahemälu automaatse puhastusega |
| Reaalaeg | Pub/Sub + Streams | Laoseis live'is, teavitused, tellimuse staatus |
Redis (vahemälu) vs ainult andmebaas
| Kriteerium | Redisega | Ainult PostgreSQL |
|---|---|---|
| Vastuseaeg korduvatele andmetele | alla 1 ms, mälust | kümneid ms, päring igal päringul |
| Suure liikluse korral | andmebaas kaitstud, skaleerub lihtsalt | andmebaas ülekoormatud, risk timeout'ideks |
| Ostukorv ja sessioonid | automaatse aegumisega | tabelid, mis kasvavad ja koormavad andmebaasi |
| Reaalaeg | natiivne Pub/Sub ja Streams | korduv pollimine, kulukas |
| Tööjärjekorrad | natiivsed, lihtsad kasutada | improviseeritud lahendused või puuduvad |
Korduma kippuvad küsimused
Mis on Redis, lühidalt?
Ülikiire mälusisene andmebaas, mida kasutatakse vahemälu-, sessiooni- ja reaalajakihina põhiandmebaasi ees. Vastab alla millisekundi.
Miks te ei kasuta lihtsalt PostgreSQL-i?
PostgreSQL on tõeallikas (püsivad andmed), kuid Redis serveerib korduvaid andmeid alla millisekundiga ning võtab üle ostukorvi, sessioonid, rate limitingu ja reaalaja, kaitstes andmebaasi suure liikluse eest. Need kaks töötavad koos.
Kas ma kaotan andmeid, kui Redis kukub?
Mitte saidi sisu: püsivad andmed on PostgreSQL-is. Redises on ainult vahemälu ja ajutised andmed ning RDB/AOF-püsivus vähendab kaotusi.
Kas ma pean Redist ise seadistama?
Ei. See on 4buildsite'i platvormi poolt kaasa arvatud ja hallatud; sina saad kiiruse ja reaalajafunktsioonide eelised, midagi haldamata.
Kuidas Redis veebipoodi aitab?
Ostukorv külastajatele, vahemällu salvestatud tootenimekirjad, live'is uuendatav laoseis ning kuritarvituste vastane kaitse kassas ja vormidel — kõik andmebaasi koormamata.
Kuidas Redis mõjutab serveri vastuseaega?
Vahemällu salvestatud andmed tulevad mälust, mitte andmebaasipäringust. Aega esimese baidini mõõdab näitaja TTFB (Time to First Byte).