Rychlejší opakované čtení
Jak používat Redis cache v PHP aplikaci
Ulož drahý výsledek na chvíli do Redis. Pak si pohlídej klíče, dobu platnosti a mazání starých dat.
Nejdřív stručně
Kdy se Redis cache hodí?
Připrav si
Co budeš potřebovat
Než něco uložíš, rozhodni se, co zrychluješ a kdy data přestanou platit.
- Běžící Redis dostupný z PHP aplikace. V produkci ho nevystavuj veřejně do internetu.
- PHP klient nebo Symfony Cache. Zvol jednu cestu pro celý projekt, aby se klíče a pravidla nerozjely.
- Název klíče, který rozliší data. Například produkt, jazyk a verzi výpočtu.
- Pravidlo pro dobu platnosti a invalidaci cache po změně zdrojových dat.
Krok 1
Přidej cache postupně
Začni jedním drahým místem. Nejprve ověř, že bez cache aplikace funguje správně.
1. Připoj Symfony k Redis
- Nainstaluj Symfony Cache, pokud ho projekt ještě nepoužívá.
- Adresu Redis dej do proměnné prostředí. Heslo ani celou adresu s heslem neukládej do repozitáře.
- Nastav Redis jako pool pro aplikační cache a ověř připojení v bezpečném prostředí.
composer require symfony/cache Symfony Cache a Redis 2. Nastav klíč a dobu platnosti
- Klíč pojmenuj podle dat, ne podle stránky. Třeba product.42.cs.
- Dobu platnosti neboli TTL zvol podle toho, jak rychle se data mění. U cen může být krátká, u konfigurace delší.
- Do klíče přidej vše, co mění výsledek: jazyk, měnu, roli nebo filtr.
$item->expiresAfter(300); // 5 minut Symfony: cache items 3. Při změně data smaž
- Po úpravě produktu smaž právě jeho klíč. Při další návštěvě se vytvoří čerstvý výsledek.
- Nespoléhej jen na TTL, pokud by uživatel mohl dlouho vidět chybnou cenu nebo stav objednávky.
- Nemaž celý Redis při každém uložení. Zbytečně tím zahodíš cache pro všechny ostatní.
$cache->delete('product.42.cs'); Symfony: mazání cache Krok 2
Ověř cache hit i stará data
Nestačí, že Redis běží. Musíš vidět, že se data čtou z cache a po změně se správně obnoví.
-
Ověř připojení
Na stroji, kde Redis běží, čekej odpověď PONG. V produkci nepouštěj tento příkaz přes veřejný endpoint.
redis-cli ping -
Načti stejná data dvakrát
První čtení může být cache miss. Druhé by mělo použít uložený výsledek. Změř čas a zkontroluj aplikační log.
-
Změň zdrojová data
Uprav produkt, spusť invalidaci cache a znovu data načti. Musíš vidět novou hodnotu.
Když to zlobí
Nejčastější chyby
Aplikace hlásí connection refused
Zkontroluj host, port, síť mezi aplikací a Redis a přihlašovací údaje. Redis nenechávej veřejně otevřený jen proto, aby se připojení povedlo.
redis-cli ping Cache nic nezrychlila
Podívej se, zda máš opakované čtení stejného klíče. Náhodný nebo příliš podrobný klíč dělá z každého čtení cache miss.
Uživatel vidí starou hodnotu
Invalidace cache musí proběhnout po změně zdroje. TTL je jen pojistka, ne náhrada důležitého mazání.
Redis se plní bez konce
Nastav rozumnou TTL, omezení paměti a sleduj počet klíčů. Neukládej celé velké odpovědi, když potřebuješ jen malý výsledek.
Hotovo
Cache je pod kontrolou.
Redis teď používáš na konkrétní drahou práci, s jasným klíčem, TTL a plánem pro smazání starých dat.