Redis jako lokální cache a fronta

Malá a rychlá služba v paměti pro aplikace v PHP. V tomto nastavení zůstává Redis soukromý v rámci VPS a chování paměti i perzistence je určené výslovně.

Lukáš Oreška 3 min čtení

1. Návrh a hranice

Redis se hodí pro položky cache, relace, fronty a krátkodobý stav aplikace. Nenahrazuje MariaDB, zálohy ani trvalá data uživatelů.

Zamýšlená topologie: aplikace v PHP i Redis běží na stejném VPS a aplikace se připojuje přes 127.0.0.1:6379 nebo lokální unixový socket.

2. Instalace a spuštění Redisu

apt update
apt -y install redis-server
systemctl enable --now redis-server
systemctl --no-pager status redis-server
redis-server --version

Debian službu spravuje jako redis-server.service. Na stejném portu nespouštějte další ručně stažený démon Redisu.

3. Naslouchejte jen lokálně

Než připojíte aplikaci, zkontrolujte aktivní naslouchání:

ss -lntp | grep 6379
grep -E '^(bind|protected-mode|port|unixsocket)' /etc/redis/redis.conf | grep -v '^#' || true

Služba má naslouchat na TCP adrese 127.0.0.1:6379 a tam, kde je zapnuté, také [::1]:6379. Ponechte protected-mode yes. Pokud dáváte přednost lokálnímu unixovému socketu, vytvořte vyhrazenou skupinu a přístup dejte jen servisnímu účtu webové aplikace.

4. Nastavte paměť a perzistenci promyšleně

Redis používá RAM. Než nastavíte limit, vyhraďte paměť pro Apache/PHP-FPM, MariaDB, Elasticsearch a operační systém. Nasazení jen jako cache obvykle používá politiku vytěsňování; nasazení pro fronty a relace často potřebuje i perzistenci.

redis-cli INFO memory
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy
redis-cli CONFIG GET appendonly
redis-cli CONFIG GET save

Příklad politiky pro cache — velikost přizpůsobte svému VPS podle skutečného využití paměti:

cat >/etc/redis/conf.d/99-application-cache.conf <<'EOF'
maxmemory 256mb
maxmemory-policy allkeys-lru
EOF
systemctl restart redis-server
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy

5. Připojení aplikací v PHP

Pro každou verzi PHP-FPM, kterou aplikace používá, nainstalujte odpovídající rozšíření Redis pro PHP:

apt -y install php8.1-redis php8.4-redis php8.5-redis
systemctl restart php8.1-fpm php8.4-fpm php8.5-fpm
php8.4 -m | grep -i redis

Konfigurace aplikace má používat hostitele 127.0.0.1, port 6379, prefix jedinečný pro aplikaci a prostředí a krátký časový limit připojení. Prefix brání tomu, aby si nesouvisející weby přepisovaly klíče v cache.

6. Ověření na VPS

redis-cli ping
redis-cli SET redis-guide:test "$(date -Is)" EX 60
redis-cli GET redis-guide:test
redis-cli INFO keyspace
redis-cli ACL LIST

První příkaz musí vrátit PONG. Dočasný testovací klíč vyprší po 60 sekundách. Chcete-li ho odstranit ručně, použijte redis-cli DEL redis-guide:test.

7. Provoz a kontrola při incidentech

systemctl is-active redis-server
redis-cli INFO memory
redis-cli INFO persistence
redis-cli SLOWLOG GET 10
journalctl -u redis-server -n 100 --no-pager
  • Sledujte využití paměti, vytěsněné klíče, odmítnutá připojení a selhání perzistence.
  • Redis restartujte až poté, co pochopíte dopad na cache, relace a aktivní fronty.
  • Data Redisu zálohujte jen tehdy, když to zvolený režim perzistence smysluplně umožňuje.
  • Instalujte bezpečnostní aktualizace Debianu a po aktualizacích Redisu otestujte chování aplikace.

Výsledek: soukromá, sledovaná instance Redisu dostupná jen aplikacím na tomto VPS.

PHPStan level 9 na velké starší kódové základně

Jak jsme CMS s více než šestnácti tisíci chyb PHPStan v baseline začali postupně odstraňovat, aniž bychom zastavili vývoj: postup s baseline, jejíž počet nesmí růst, a pro každou opakující se třídu chyb oprava, kterou dnes používáme reflexivně.
19 min čtení

Publikace Android aplikace v Google Play: od Play Console po interní testování

Všechno, na co se Play Console ptá, než aplikace dorazí k prvním testerům: prohlášení o obsahu aplikace, Data safety, stránka v obchodě, nové prohlášení o médiích vytvořených AI, veřejně dostupné zásady ochrany soukromí, interní testování, podepisování aplikace a co čekat u ceny a daní.
9 min čtení

Vydání Expo aplikace bez EAS: lokální podepsané buildy pro Android

Jak na vlastním Macu vyrobit z projektu Expo SDK 57 správně podepsaný Android App Bundle připravený pro Play: keystore pro nahrávání (upload keystore) mimo repozitář, config plugin, který přežije prebuild, jedna oprava paměti Gradle a skript, který odmítne skončit, pokud je podpis špatný.
9 min čtení

Řešíte něco podobného na svém webu?

Napište mi, odpovím do druhého dne.

Napsat zprávu