Slovník pojmů

Redis: rychlá data v paměti pro práci aplikace

Cache, relace, čítače a koordinace mohou být rychlé — jen pokud systém umí pracovat s expirací, výpadkem a neplatnými daty.

Stručná definice

Rychlé úložiště pro dočasný i provozní stav.

Redis nepracuje hlavně s tabulkami a SQL. Ukládá hodnoty pod klíči a nad nimi provádí operace nad řetězci, hash mapami, seznamy, množinami, seřazenými množinami a dalšími strukturami. Mnohé základní operace nad jedním klíčem jsou atomické, což je užitečné například pro čítač požadavků.

Data jsou primárně v RAM. Redis umí perzistenci na disk, replikaci i další provozní režimy, ale to nemění potřebu určit zdroj pravdy. Pro objednávky a nenahraditelné záznamy je jím obvykle relační databáze; Redis drží odvozenou, krátkodobou nebo koordinující vrstvu.

Použití

Kde rychlá data pomáhají

Use case má vycházet z toho, zda lze data dopočítat, jak dlouho platí a co se stane při výpadku.

  • cache produktů, konfigurace a náročných dotazů
  • session storage pro více instancí aplikace
  • čítače, kvóty a rate limiting API
  • krátkodobé tokeny a výsledky probíhající operace
  • fronty a streamy se zpracováním po skupinách
  • koordinace a distribuované zámky mezi workery

Praktický příklad

Cache produktového katalogu

E-shop hledá produkt v klíči product:4821:detail. Při cache miss ho načte z relační databáze, uloží serializovaný výsledek s krátkým TTL a odpověď vrátí návštěvníkovi.

Při změně ceny nebo skladu aplikace cache cíleně invaliduje či zapíše nový obsah. TTL je pojistka, ne mechanismus konzistence: bez invalidace mohou uživatelé do expirace vidět starý stav. Při výpadku Redisu aplikace čte zdroj pravdy, i když za cenu vyšší zátěže databáze.

Jak funguje

Cache-aside: klíč, TTL a fallback

Nejběžnější použití cache ukazuje, kde začíná odpovědnost aplikace.

  1. Požadavek Backend potřebuje produkt nebo jiný krátkodobě platný stav.
  2. Čtení klíče Přečte předvídatelně pojmenovaný klíč v Redisu.
  3. Fallback Při cache miss nebo výpadku načte autoritativní databázi či službu.
  4. Zápis s TTL Výsledek uloží na omezenou dobu, po níž klíč expiruje.
  5. Invalidace Změna zdroje pravdy odpovídající klíče vymaže či obnoví a tým sleduje provozní metriky.

Důležité vlastnosti

Datové struktury, expirace a sdílený stav

Strukturu je vhodné volit podle operace, kterou aplikace potřebuje provést.

Datové struktury

String se hodí pro jednoduchou hodnotu či čítač, hash pro více vlastností, set pro unikátní členy, sorted set pro pořadí a stream pro záznamy zpracovávané skupinou.

TTL a cache

Po vypršení TTL Redis klíč při čtení považuje za expirovaný a průběžně jej odstraňuje. TTL sedí na cache, kvótu nebo jednorázový token, ne na jedinou kopii důležitých dat. Cache-aside stále vyžaduje invalidaci po zápisu.

Sessions a rate limiting

Sdílené relace usnadní běh více PHP instancí. Atomické inkrementace a expirace pomáhají počítat limit požadavků; přesný algoritmus časového okna je stále návrhové rozhodnutí.

Pub/Sub, Streams a zámky

Pub/Sub doručuje zprávu jen právě připojeným odběratelům; při odpojení se ztratí. Streams drží záznamy pro skupiny a umožňují jiný model zpracování. Zámek omezuje souběh, ale žádná z těchto funkcí sama nezaručí idempotentní businessový účinek.

Provozní vlastnosti

Perzistence, evikce a koordinace

Redis nabízí více než cache, ale každý účel přináší vlastní podmínky.

RDB snapshot
Bodový snímek dat v intervalech; při náhlém výpadku může chybět část posledních zápisů.
AOF
Append-only soubor zaznamenává operace; politika fsync určuje kompromis mezi výkonem a možnou ztrátou posledních zápisů.
Maxmemory a eviction
Při plné paměti Redis podle politiky maže klíče nebo odmítá zápisy. Pro cache je evikce přijatelná, pro jedinou kopii stavu ne.
Distribuovaný zámek
SET s NX a PX může krátce koordinovat práci. Uvolnění i prodloužení musí ověřit owner token.

Výhody a omezení

Rychlost nenahrazuje návrh dat

Přínosy

  • rychlé operace nad často čtenými a krátkodobými daty
  • TTL a atomické příkazy pro cache, čítače a koordinaci
  • sdílený dočasný stav pro více instancí aplikace
  • doplňuje relační databázi místo snahy ji ve všem nahradit

Na co pozor

  • TTL samo neřeší invalidaci a může vracet staré hodnoty
  • výpadek cache nemá znamenat výpadek aplikace ani stampede databáze
  • nekontrolovaný růst klíčů může vyčerpat paměť
  • Redis lock není záruka exactly once ani náhrada databázové ochrany

Hranice použití

Redis pomáhá, když rychlost a životnost odpovídají datům.

Je vhodný pro cache, krátkodobý stav, relace, kvóty a koordinaci, kde ztráta klíče nezničí autoritativní businessový záznam. Hodí se i tehdy, když více instancí aplikace potřebuje sdílet stejný dočasný stav.

Pro složité relační dotazy, dlouhodobou historii a účetní stopu není rychlost argumentem pro výměnu relační databáze. Před nasazením je dobré pojmenovat konkrétní úzké hrdlo i plán chování při nedostupnosti.

Na co myslet

Redis potřebuje limity, měření a fallback

Provozní bezpečnost závisí na pravidlech kolem serveru i aplikace.

  • prefixy klíčů a TTL odpovídající povaze dat
  • maxmemory a evikční politika odpovídající riziku ztráty
  • monitoring paměti, evikcí, latence, připojení a cache hit rate
  • test výpadku, restartu a současného cache miss
  • síťové zabezpečení, ACL a žádná citlivá data v klíčích

Časté otázky

Co Redis řeší a co ne

Je Redis databáze, nebo cache?

Technicky je to datové úložiště s vlastními strukturami a persistencí. V řadě aplikací slouží hlavně jako cache; rozhodující je, zda návrh umí snést jeho ztrátu.

Proč nestačí nastavit dlouhé TTL?

Dlouhé TTL sníží počet dotazů, ale prodlouží dobu, po kterou může aplikace vracet stará data. Je to kompromis doplněný invalidací při změně důležitých dat.

Může Redis nahradit PostgreSQL?

Pro jednoduchý use case může být autoritativním úložištěm, ale datový model, dotazování a provozní vlastnosti jsou jiné. Pro objednávky a dlouhodobou historii je relační databáze obvykle vhodnější.

Zajistí Redis zámek, že úloha proběhne jen jednou?

Ne úplně. Zámek omezuje souběh, ale při timeoutu, pádu procesu nebo failoveru zůstává nejistota. Výsledek úlohy má být idempotentní nebo chráněný i v autoritativním úložišti.

Jak Redis používám v praxi

Redis používám tam, kde dává smysl rychlý a krátkodobý stav.

V integračních službách pracuji s cache, koordinací a provozními omezeními podle konkrétního toku dat.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.