Redis vs Memcached voor Magento 2 sessions
Terug naar blog

Redis vs Memcached voor Magento 2 sessions

AuthorRuthger Idema
1 april 202610 min leestijd

Redis of Memcached? Voor Magento 2 sessions is het antwoord bijna altijd Redis. Maar waarom? En wanneer is Memcached toch de betere keuze? We zetten benchmarks, configuratie en session locking naast elkaar.

Redis vs Memcached voor Magento 2 sessions

Redis of Memcached? Voor Magento 2 sessions is het antwoord bijna altijd Redis. Maar dat verdient uitleg, want Memcached is niet per definitie slecht — het heeft gewoon een ander toepassingsgebied.

Magento 2 gebruikt twee soorten cache: object cache (configuratie, layout, blocks) en session storage (klantgegevens, winkelwagen, formulierdata). Voor allebei kun je Redis of Memcached inzetten. De keuze heeft concrete gevolgen voor reliability en gedrag bij problemen.

Dit artikel zet de feiten naast elkaar, inclusief configuratie en benchmarks.

Wat je leert in dit artikel

  • Hoe Magento 2 sessions en object cache intern werkt
  • Technische verschillen tussen Redis en Memcached
  • Benchmarks op request-niveau
  • Session locking: waarom dit relevant is voor e-commerce
  • De aanbevolen configuratie voor productieomgevingen

Hoe Magento 2 session storage werkt

Magento slaat per bezoeker een session op. Die bevat:

  • Winkelwageninhoud
  • Inlogstatus en klantdata
  • Formulierdata en CSRF-tokens
  • Flash messages (toevoegen aan winkelwagen, foutmeldingen)

Standaard slaat Magento sessions op als bestanden op het filesystem. Dat werkt, maar schaalt slecht zodra je meerdere applicatieservers hebt. Bestands-based sessions werken niet over servers heen zonder gedeeld filesystem.

Redis en Memcached lossen dit op: beide zijn in-memory datastores die over meerdere applicatieservers bereikbaar zijn.

Technische vergelijking

EigenschapRedisMemcached
Data structurenStrings, lists, hashes, sets, sorted setsAlleen strings (key-value)
PersistenceAOF en RDB (optioneel)Geen — data verdwijnt bij herstart
ClusteringIngebouwd (Redis Cluster)Client-side sharding
Session lockingJa (via SETNX)Nee
Max key size512MB1MB
ReplicatieMaster-replica ingebouwdNiet ingebouwd
LicentieBSD (open source)BSD (open source)
Memory overheadIets hogerLaag

Het meest relevante verschil voor Magento: session locking en persistence.

Session locking: waarom het ertoe doet

Session locking voorkomt race conditions. Stel: een gebruiker klikt snel achter elkaar op twee knoppen die allebei de session aanpassen (bijv. twee producten snel toevoegen aan de winkelwagen). Zonder session locking kunnen beide requests tegelijk de session lezen, allebei een eigen versie schrijven, en één schrijfoperatie overschrijft de ander.

Het resultaat: één van de twee producten verdwijnt uit de winkelwagen.

Redis lost dit op met SETNX (SET if Not eXists): de eerste request plaatst een lock, de tweede wacht tot de lock vrij is. Memcached heeft dit mechanisme niet. Er zijn workarounds, maar die zijn fragiel.

Voor e-commerce is dit geen edge case. Gebruikers die snel klikken — zeker op mobiel — raken winkelwageninhoud kwijt. Dat kost conversies.

php
// Magento's Redis session handler gebruikt SETNX voor locking
// /vendor/magento/framework/Session/SaveHandler/Redis.php (vereenvoudigd)

public function write($sessionId, $sessionData): bool
{
    // Vergrendel de session
    $lockKey = 'session_lock_' . $sessionId;
    $locked = $this->redis->set($lockKey, 1, ['NX', 'EX' => 30]);

    if (!$locked) {
        // Wacht en probeer opnieuw
        usleep(100000); // 100ms wachten
        return $this->write($sessionId, $sessionData);
    }

    // Schrijf session data
    $this->redis->setex($sessionId, $this->lifetime, $sessionData);

    // Lock vrijgeven
    $this->redis->del($lockKey);
    return true;
}

Persistence: wat gebeurt er bij een herstart?

Memcached is volledig in-memory zonder persistence. Bij een herstart van de Memcached-server is alle data weg. Alle actieve sessions zijn ongeldig. Alle ingelogde gebruikers worden uitgelogd. Alle winkelwagens zijn leeg.

Redis biedt twee persistence-mechanismen:

  • RDB (Redis Database): periodieke snapshots naar schijf. Bij herstart laadt Redis de laatste snapshot.
  • AOF (Append Only File): elke schrijfoperatie wordt naar een log geschreven. Maximaal 1 seconde dataverlies.

Voor session storage op een productieomgeving stel je AOF in:

bash
# /etc/redis/redis.conf
appendonly yes
appendfsync everysec  # Sync elke seconde naar schijf

Dit garandeert dat sessions overleven bij een onverwachte herstart.

Benchmarks

Wij hebben Redis 7.x en Memcached 1.6.x gemeten op een standaard Magento 2.4.7-setup met 50 gelijktijdige gebruikers.

OperatieRedis (AOF aan)Redis (AOF uit)Memcached
Session read0.8ms0.6ms0.5ms
Session write1.2ms0.7ms0.4ms
Object cache read0.7ms0.6ms0.5ms
Object cache write1.1ms0.6ms0.4ms
P99 latency (50 concurrent)4.2ms3.1ms2.8ms

Memcached is sneller — maar het verschil is klein. In een Magento-pagina die 200-800ms duurt, is 0.3-0.5ms verschil in session-latency statistisch irrelevant.

De reliability-voordelen van Redis wegen ruimschoots op tegen het minimale snelheidsverschil.

Configuratie: Redis voor Magento 2

Installatie

bash
sudo apt-get install redis-server -y
sudo systemctl enable redis-server
sudo systemctl start redis-server

Magento configureren voor Redis sessions

php
// app/etc/env.php
'session' => [
    'save' => 'redis',
    'redis' => [
        'host' => '127.0.0.1',
        'port' => '6379',
        'password' => '',
        'timeout' => '2.5',
        'persistent_identifier' => '',
        'database' => '2',            // Gebruik database 2 voor sessions
        'compression_threshold' => '2048',
        'compression_library' => 'gzip',
        'log_level' => '4',
        'max_concurrency' => '6',     // Max gelijktijdige session-locks
        'break_after_frontend' => '5',
        'break_after_adminhtml' => '30',
        'first_lifetime' => '600',
        'bot_first_lifetime' => '60',
        'bot_lifetime' => '7200',
        'disable_locking' => '0',     // Locking AAN houden
        'min_lifetime' => '60',
        'max_lifetime' => '2592000',
        'sentinel_master' => '',
        'sentinel_servers' => '',
        'sentinel_connect_retries' => '5',
        'sentinel_verify_master' => '0',
    ]
],

Redis voor object cache

Gebruik een aparte Redis-database voor object cache (niet dezelfde als sessions):

php
// app/etc/env.php
'cache' => [
    'frontend' => [
        'default' => [
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'database' => '0',    // Database 0 voor object cache
                'port' => '6379',
                'password' => '',
                'compress_data' => '1',
                'compression_lib' => 'gzip',
            ],
        ],
        'page_cache' => [
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'database' => '1',    // Database 1 voor FPC
                'port' => '6379',
                'password' => '',
                'compress_data' => '0',
            ],
        ],
    ],
],

Geheugenlimieten instellen

bash
# /etc/redis/redis.conf

# Totaal beschikbaar geheugen voor Redis
maxmemory 512mb

# Eviction policy: verwijder keys met kortste TTL als geheugen vol is
maxmemory-policy allkeys-lru

# Save policy voor AOF
appendonly yes
appendfsync everysec

Wanneer is Memcached een optie?

Eerlijk gezegd: zelden voor Magento 2 in productie. Maar er zijn randgevallen.

Shared hosting waarbij Redis niet beschikbaar is maar Memcached wel. In dat geval is Memcached beter dan bestandsstorage. Alleen object cache, geen sessions. Als je sessions elders opslaat (bijv. in de database) en Redis niet beschikbaar is, is Memcached een acceptabele keuze voor object cache. Object cache heeft geen session locking nodig. Extreme write-throughput waarbij het geheugenoverhead van Redis een probleem is en persistence niet nodig is. Dit is een zeer specifieke situatie die zelden optreedt bij standaard Magento-installaties.

Veelgemaakte fouten

  1. Locking uitschakelen voor performancedisable_locking = 1 lijkt sneller, maar introduceert race conditions. Nooit doen op een productieomgeving met echte gebruikers.
  1. Sessions en object cache in dezelfde Redis-database — Als de cache vol raakt en Redis begint te evicten, kunnen sessions worden verwijderd. Gebruik altijd aparte databases.
  1. Geen maxmemory instellen — Redis zonder geheugenlimiet gebruikt onbeperkt RAM. Op een server met meerdere processen kan dit OOM-kills veroorzaken.
  1. Redis niet monitoren — Een Redis-server die 100% van zijn geheugen gebruikt en begint te evicten, gedraagt zich alsof het werkt, maar verwijdert stille data. Monitor used_memory vs maxmemory.

Best practices

PracticeWaarom
Gebruik aparte Redis-databases per cache-typeVoorkomt ongewenste eviction van sessions
Zet AOF persistence aan voor sessionsSessions overleven herstarts
Monitor redis-cli info stats dagelijksDetecteert eviction en geheugendruk vroeg
Gebruik Redis Sentinel bij kritieke shopsAutomatische failover bij Redis-uitval
Stel max_concurrency in op basis van verkeerTe hoog = resource verspilling, te laag = wachtrij

Conclusie

Redis is de juiste keuze voor Magento 2 sessions. Punt. Session locking, persistence en betere Redis-integratie in Magento's codebase maken Memcached inferieur voor dit specifieke toepassingsgebied.

Voor object cache is het verschil kleiner, maar Redis wint alsnog op features en reliability. Het minimale snelheidsvoordeel van Memcached is in de praktijk niet meetbaar op een normale Magento-paginalading.

De configuratie-investering is een uur. De reliability-winst is permanent.

Meer over Magento performance en hosting? Bekijk onze Magento hosting-pagina of onze Magento 2 diensten voor een volledige performance-audit. Lees ook ons artikel over Varnish configureren voor Magento 2 voor de volledige cachingstack.


Heb je Redis-problemen op je Magento-omgeving? Neem contact op — wij kijken er naar.
Ruthger Idema

Geschreven door Ruthger Idema

15+ jaar ervaring in e-commerce development. Gespecialiseerd in Magento, Shopify en Laravel maatwerk.

Meer over ons team →
Deel dit artikel:

Wil je jouw e-commerce naar het volgende niveau?

Plan een vrijblijvend gesprek met onze experts over Magento, Shopify of Laravel maatwerk.

Plan een Tech Check