Preskočiť na obsah
Databáza

Redis

Redis je open-source in-memory dátový sklad, ktorý uchováva dáta priamo v operačnej pamäti a dosahuje latenciu v mikrosekundách. Podporuje bohaté dátové štruktúry a slúži na cachovanie, správu sessions, fronty úloh, rate limiting a real-time pub/sub komunikáciu.

Ako to funguje

PostgreSQL je spoľahlivá, trvalá databáza — ale každý dotaz znamená disk I/O a CPU na parsovanie SQL. Pre časté operácie s predvídateľnými dátami — napríklad načítanie konfigurácie systému, počet neprebratých notifikácií, výsledok drahého analytického dotazu — sa oplatí výsledok na chvíľu uložiť do pamäte. Redis toto robí natívne a s extrémnou rýchlosťou: dáta v pamäti sú o niekoľko rádov rýchlejšie ako dáta na disku.

Redis nie je len kľúč-hodnota sklad. Podporuje reťazce, hashe (pre objekty), zoznamy (pre fronty a stáčiky), množiny (pre unikátne hodnoty), zoradené množiny (pre leaderboardy a fronty s prioritou) a bitmaps (pre efektívne počítanie). Každý typ má vlastné atomické operácie — INCR inkrementuje číslo, ZADD pridáva do zotriedenej množiny, LPUSH/RPOP implementuje FIFO frontu. Tieto operácie sú atómické aj bez transakcií, čo ich robí bezpečnými pre súbežné prístupy z viacerých procesov.

Kritický rozdiel oproti PostgreSQL: Redis je primárne in-memory. Ak sa server reštartuje bez persistencie, dáta sa stratia. Redis ponúka dve formy persistencie: RDB (pravidelné snímky na disk) a AOF (append-only log každej operácie). Pre cachovanie je strata dát pri reštarte akceptovateľná — cache sa doplní pri prvom dopyte. Pre session tokeny alebo fronty úloh je persistencia nevyhnutná. V produkcii zvyčajne kombinujeme RDB a AOF, alebo používame managed Redis (Upstash, Redis Cloud) kde persistenciu a replikáciu zabezpečuje provider.

BullMQ je populárna knižnica pre fronty úloh postavená na Redise. Umožňuje spustiť úlohu asynchrónne — email sa zaradí do fronty, worker ho spracuje na pozadí, používateľ nedostane odpoveď až po odoslaní. BullMQ podporuje retry logiku (automatické opakovanie pri zlyhaní), delay (spustiť úlohu o X sekúnd), priority fronty a monitoring cez BullBoard. Toto je základ pre webhooky, odosielanie emailov, generovanie PDF reportov a akúkoľvek operáciu, ktorá je príliš pomalá na synchronné spracovanie v HTTP requeste.

Z našej praxe

V Strange Loops je Redis štandardnou súčasťou každého projektu s asynchrónnym spracovaním. Pre Ovulogy (edtech SaaS) sme Redis nasadili ako backend pre BullMQ — všetky transakčné emaily (onboarding, platobné potvrdenia Stripe webhooky) idú cez frontu, aby HTTP request neblokoval na odoslaní. Pre QualiTravel (travel agency management) Redis slúži na cachovanie GDS odpovedí — drahé dotazy na letové dostupnosti sa cacheujú s TTL 60 sekúnd, čo pri vysokom objeme dopytov dramaticky znižuje záťaž na externé GDS systémy a náklady za API volania. Pre rehabit je Redis session store — autentifikácia cez Better Auth ukladá sessions do Redisu pre rýchle overenie bez databázového dotazu. Všetky produkčné inštancie bežia ako Docker kontajner na DigitalOcean s AOF persistenciou.

Kedy to potrebujete

  • Cachujete výsledky drahých databázových dotazov alebo externých API volaní, aby opakované požiadavky neblokovali zdroje
  • Potrebujete asynchrónne spracovanie — emaily, PDF generovanie, webhooky — aby HTTP request vrátil odpoveď okamžite a práca prebehla na pozadí
  • Implementujete rate limiting API endpointov — obmedzenie počtu požiadaviek na endpoint za časové okno bez nutnosti databázového dotazu
  • Ukladáte session tokeny pre autentifikáciu — rýchle overenie identity pri každom requeste bez zaťažovania PostgreSQL

Najčastejšie otázky

Môžem Redis použiť namiesto PostgreSQL?

Pre väčšinu prípadov nie. Redis je rýchly, ale primárne in-memory — nie je navrhnutý pre trvalé ukladanie veľkých relačných dát s ACID zárukami. PostgreSQL je transakčná databáza s trvalým ukladaním, komplexnými dotazmi a relačnými väzbami. Redis a PostgreSQL sa dopĺňajú: PostgreSQL je primárny zdroj pravdy, Redis je rýchla cache a dátová štruktúra pre špecifické účely.

Čo sa stane s dátami v Redise pri reštarte servera?

Závisí od konfigurácie persistencie. Bez persistencie (predvolené) sa dáta stratia — čo je akceptovateľné pre cachovanie. S RDB persistenciou Redis pravidelne (každých X sekúnd alebo Y zmien) zapíše snímku na disk — strata dát je obmedzená na interval medzi snímkami. S AOF persistenciou sa každá operácia zapisuje na disk — takmer nulová strata dát, ale väčší disk overhead. V produkcii odporúčame kombináciu alebo managed Redis so zabudovanou replikáciou.

Čo je BullMQ a prečo ho potrebujem?

BullMQ je knižnica pre fronty úloh postavená na Redise. Namiesto priameho vykonania pomalej operácie (odoslanie emailu, generovanie PDF, volanie externého API) zaradíte úlohu do fronty a okamžite vrátite odpoveď používateľovi. Worker proces frontu sleduje a úlohu vykoná asynchrónne. BullMQ pridáva retry logiku, monitoring a priority — a Redis ako backend zaisťuje, že žiadna úloha sa nestratí ani pri páde workerového procesu.

Potrebujete s tým pomôcť?

Ak riešite niečo z toho, čo tu opisujeme, ozvite sa. Povieme vám, či a ako vieme pomôcť.