Preskočiť na obsah
Backend Redis 16. jún 2026 · 9 min čítania

Redis v Laravel: sessions, cache a queues — praktický návod

Čas odozvy z 300 ms na 5 ms. To nie je reklamné tvrdenie — to je reálny rozdiel medzi MySQL session driverom a Redisom na rovnakom serveri. Tento návod vám ukáže, ako Redis nakonfigurovať v Laravel pre tri kľúčové oblasti: caching, session storage a job queues.

DC

Dušan Chlpek

Senior PHP vývojár · GEAR s.r.o. · 25+ rokov praxe

Prečo Redis, keď Laravel funguje aj bez neho?

Laravel out-of-the-box podporuje viacero driverov pre cache aj session: file, database, array, redis, memcached. Predvolený je file driver, a pre malé projekty postačuje. Problém nastáva pri škálovaní.

DriverRýchlosť čítaniaRýchlosť zápisuVhodný pre
file~5 ms~8 msvývoj, mikroprojekty
database~15–50 ms~20–60 msak nemáte Redis
redis<1 ms<1 msprodukcia, vysoká záťaž
memcached<1 ms<1 mslegacy projekty

Redis je in-memory databáza — dáta sú v RAM, nie na disku. Preto je rádovo rýchlejší. Navyše podporuje perzistenciu (RDB, AOF), pub/sub, sorted sets a Lua scripting — veci, ktoré Memcached nemá.

Tip: Redis 7.x je LTS verzia platná pre produkčné nasadenia v roku 2026. Na Ubuntu/Debian ho nainštalujete príkazom sudo apt install redis-server.

Inštalácia a konfigurácia v Laravel 12

Laravel komunikuje s Redisom cez PHP rozšírenie phpredis alebo Composer balíček predis. Odporúčam phpredis — je to C rozšírenie, takže výrazne rýchlejšie.

# Inštalácia phpredis (Ubuntu/Debian)
sudo apt install php8.4-redis

# Alternatíva cez Composer (pomalší, ale bez systémovej závislosti)
composer require predis/predis

V súbore .env nastavte pripojenie:

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Konfigurácia v config/database.php sekcia redis je prednastavená správne. Odporúčam pridať prefix, ak na jednom Redis serveri beží viac aplikácií:

'redis' => [
    'client' => env('REDIS_CLIENT', 'phpredis'),
    'options' => [
        'prefix' => env('REDIS_PREFIX', 'gear_'),
    ],
    'default' => [
        'host'     => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD'),
        'port'     => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],
    'cache' => [
        'host'     => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD'),
        'port'     => env('REDIS_PORT', 6379),
        'database' => env('REDIS_CACHE_DB', 1),
    ],
],
Separátna databáza pre cache (database: 1) od session databázy (database: 0) zjednodušuje čistenie cache bez dotyku sessions.

Cache — rýchly, tagovaný, invalidovateľný

V .env prepnite cache driver:

CACHE_DRIVER=redis

Laravel Cache facade potom automaticky používa Redis. Základné operácie:

use Illuminate\Support\Facades\Cache;

// Uloženie na 60 minút
Cache::put('produkty', $produkty, now()->addMinutes(60));

// Čítanie s fallbackom
$produkty = Cache::get('produkty', fn() => Produkt::all());

// Remember — automatický fallback + zápis
$produkty = Cache::remember('produkty', 3600, function () {
    return Produkt::with('kategorie')->get();
});

// Zmazanie
Cache::forget('produkty');
Cache::flush(); // Pozor: maže všetok cache!

Cache Tags — skupinová invalidácia

Tags sú jedna z najsilnejších funkcií Redis cache. Umožňujú invalidovať skupinu kľúčov naraz — ideálne pri editovaní entít.

// Uloženie s tagom
Cache::tags(['produkty', 'eshop'])->put('produkt_42', $produkt, 3600);
Cache::tags(['kategorie'])->put('kat_elektronika', $kat, 7200);

// Invalidácia všetkého s tagom 'produkty'
Cache::tags(['produkty'])->flush();
// Tým pádom sa zmažú len produkt cache, nie kategorie
Pozor: Cache tags fungujú iba s redis, memcached a array driverom. S file alebo database nie sú podporované.

TTL stratégie — čo ako dlho cachevať

Neexistuje univerzálne pravidlo. Odporúčam vychádzať z volatility dát:

Session storage — preč z MySQL

Session driver database generuje SQL dopyt pri každej požiadavke. Pri 100 súbežných používateľoch je to 100 zbytočných SELECT dopytov za sekundu. Redis to rieši v pamäti.

SESSION_DRIVER=redis
SESSION_LIFETIME=120
SESSION_CONNECTION=default

V config/session.php skontrolujte, že 'connection' ukazuje na správne Redis spojenie. Pre session odporúčam database: 0 (oddelené od cache).

'connection' => env('SESSION_CONNECTION', 'default'),

Session dáta sa v Redis ukladajú ako hash s TTL rovnajúcim sa SESSION_LIFETIME. Automaticky expirujú — netreba žiadne cleanup joby ako pri database driveri.

Queues — asynchrónne úlohy cez Redis

Redis queue driver je predvolená voľba pre produkčné Laravel aplikácie. Je rýchlejší ako database a podporuje prioritné fronty, delayed jobs aj job batching.

QUEUE_CONNECTION=redis

Spustenie workera:

# Základný worker
php artisan queue:work redis --queue=high,default

# Pre produkciu odporúčam Supervisor
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work redis --queue=high,default --tries=3
autostart=true
autorestart=true
numprocs=4
redirect_stderr=true

Laravel Horizon — monitoring a škálovanie

Pre produkčné projekty s Redis queues je Laravel Horizon nutnosť. Poskytuje real-time dashboard pre monitorovanie jobov, throughput metriky a automatické škálovanie workerov.

composer require laravel/horizon
php artisan horizon:install
php artisan horizon

Horizon dashboard je dostupný na /horizon. Nakonfigurujte prístup v config/horizon.php cez gate() callback — nikdy nenechajte dashboard verejne prístupný.

// app/Providers/HorizonServiceProvider.php
protected function gate(): void
{
    Gate::define('viewHorizon', function (User $user) {
        return in_array($user->email, [
            'admin@vasa-domena.sk',
        ]);
    });
}

Event-driven invalidácia cache

Najrobustnejšia stratégia pre cache invalidáciu je reagovať na Model eventy. Keď sa záznam zmení, cache sa automaticky invaliduje.

// app/Models/Produkt.php
protected static function booted(): void
{
    static::saved(function (Produkt $produkt) {
        Cache::tags(['produkty'])->flush();
        Cache::forget("produkt_{$produkt->id}");
    });

    static::deleted(function (Produkt $produkt) {
        Cache::tags(['produkty'])->flush();
        Cache::forget("produkt_{$produkt->id}");
    });
}
Pre komplexnejšie prípady zvážte Observer triedu namiesto booted() callbackov. Observer oddeľuje zodpovednosť a je ľahšie testovateľný.

Redis na produkčnom serveri — zabezpečenie

Redis predvolene počúva na 127.0.0.1:6379 bez hesla. Pre produkciu:

# /etc/redis/redis.conf
bind 127.0.0.1 ::1
requirepass vas-bezpecny-redis-password
maxmemory 512mb
maxmemory-policy allkeys-lru

Politika allkeys-lru znamená: keď Redis dosiahne limit pamäte, vymaže najmenej používané kľúče. Ideálne pre cache workload.

Záver: Redis mení výkon aplikácie fundamentálne

Tri zmeny v .envCACHE_DRIVER=redis, SESSION_DRIVER=redis, QUEUE_CONNECTION=redis — a vaša Laravel aplikácia je výrazne rýchlejšia. Redis znižuje záťaž na databázu, eliminuje I/O operácie so súborovým systémom a otvára dvere pre pokročilé funkcie ako tagovaná cache alebo Laravel Horizon.

Pri správnom nastavení TTL stratégií a event-driven invalidácii dostanete cache, ktorá je rýchla aj konzistentná — bez trade-offov.

Potrebujete Redis integráciu alebo audit výkonu?

Navrhnem a implementujem Redis stack pre váš Laravel projekt — od inštalácie po Horizon monitoring a caching stratégiu. Odpoveď do 24 hodín.

Nezáväzný dopyt

Ďalšie články

Zavolať E-mail Dopyt

Ochrana súkromia

Táto stránka využíva cookies pre nevyhnutné fungovanie. Rešpektujeme vaše súkromie a legislatívu GDPR.