Terug naar het blog

Hoe Drupal te versnellen met de juiste caches: OPcache, APCu en een gedeelde backend (Redis of Memcached)

2025-08-1310 minuten leestijd

Als uw Drupal-site traag aanvoelt, is caching meestal de oplossing. Niet één enkele oplossing, echter. Verschillende lagen lossen verschillende problemen op. Daarom verschijnen OPcache, APCu en een gedeelde backend zoals Redis of Memcached vaak samen. Elk versnelt een specifiek deel van de stack. Gebruik ze goed en Drupal wordt vlot. Gebruik ze slecht en het blijft slepen.

Waarschuwing: kies één gedeelde backend voor Drupal cache bins. Gebruik Redis of Memcached, niet beide voor dezelfde bins.

In één oogopslag: moet doen vs geavanceerd

  • Moet doen: Schakel OPcache in PHP in. Zet APCu aan voor lokale caches. Kies één gedeelde backend voor bins op multi-server setups.
  • Geavanceerd: Wijs specifieke bins toe, tune Redis client timeouts, pas Memcached itemgrootte aan, comprimeer grote Redis waarden, bepaal de grootte van pools op basis van werkelijk gebruik.

Snelle beslissingsgids

SetupMoet doenGedeelde backendBest voorOpmerkingen
Enkele serverOPcache + APCuOptioneelKleine sites op één nodeDB cache is mogelijk prima. Voeg Redis of Memcached toe als het verkeer toeneemt.
Meerdere serversOPcache + APCuRedis of MemcachedLoad-balanced clustersGebruik één gedeelde backend voor render, dynamic page cache, page, default, data.
Content met hoge variabiliteitOPcacheRedisComplexe tagging en invalidatieStructuren en persistentieopties helpen.
Lean en eenvoudigOPcacheMemcachedPure caching met minimale overheadZeer snel, vluchtig van aard.

Wat elke cache doet

  • OPcache: Versnelt PHP zelf door gecompileerde scripts te cachen.
  • APCu: Lokale, per server key-value cache voor kleine lookups.
  • Redis: Gedeelde in-memory datastore voor caches, wachtrijen, locks, sessies.
  • Memcached: Gedeelde in-memory key-value cache, zeer eenvoudig en snel.

Hoe deze passen in Drupal

  • OPcache: Inschakelen op PHP-niveau. Geen Drupal-module.
  • APCu: Lokale caches en bootstrap-gegevens serveren.
  • Redis of Memcached: Wijs render, dynamic page cache, page, default, data toe aan de gedeelde backend. Ondersteunt ook sessies, locks en wachtrijen.

Gerelateerd: State cache (Drupal 10.3+, standaard ingeschakeld in Drupal 11). Zie het aparte artikel voor details: Versnel de Drupal backend met $settings['state_cache'].

Pro Tip: Houd op multi-server setups bootstrap in APCu voor ultra-lage latentie, en verplaats de rest naar de gedeelde backend.

settings.php snelle recepten

Plakken, dan aanpassen.

Redis

Drupal integratie

$settings['container_yamls'][] = 'modules/contrib/redis/redis.services.yml';
$settings['redis.connection']['interface'] = 'PhpRedis';
$settings['redis.connection']['host'] = '127.0.0.1';
$settings['redis.connection']['port'] = 6379;
$settings['cache']['default'] = 'cache.backend.redis';
$settings['cache']['bins']['render'] = 'cache.backend.redis';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.redis';
$settings['cache']['bins']['page'] = 'cache.backend.redis';

Prestatie-tuning

// Optionele compressie
$settings['redis_compress_length'] = 100;
$settings['redis_compress_level'] = 1;
// Client timeouts (PhpRedis)
$settings['redis.connection']['timeout'] = 1.0;
$settings['redis.connection']['read_timeout'] = 1.0;
$settings['redis.connection']['retry_interval'] = 100;
$settings['redis.connection']['persistent'] = TRUE;
  • container_yamls: Registreert Redis services.
  • interface: Kiest de client. PhpRedis is een native extensie.
  • host/port: Specificeert het verbindingsdoel. Geef de voorkeur aan Unix-socket op dezelfde host.
  • cache.default: Stelt de standaard backend in voor niet-toegewezen bins.
  • bins: Wijs specifieke bins toe aan Redis.
  • compress_length/level: Comprimeert grote waarden om geheugen te besparen.
  • timeouts/persistent: Stelt verbindings-/leestimeouts in en hergebruikt verbindingen.

Memcached

Drupal integratie

$settings['container_yamls'][] = 'modules/contrib/memcache/memcache.services.yml';
$settings['memcache']['servers']['127.0.0.1:11211'] = 'default';
$settings['memcache']['bins']['render'] = 'default';
$settings['memcache']['bins']['dynamic_page_cache'] = 'default';
$settings['memcache']['bins']['page'] = 'default';
$settings['cache']['default'] = 'cache.backend.memcache';
  • container_yamls: Registreert Memcache services.
  • servers: Definieert de serverlijst en poolnaam.
  • bins: Wijs bins toe aan een pool.
  • cache.default: Stelt de standaard backend in voor niet-toegewezen bins.

APCu voor lokale bins

// Vereist APCu backend module
$settings['cache']['bins']['bootstrap'] = 'cache.backend.apcu';
  • bootstrap: Houdt hot bootstrap-gegevens in het proces voor de laagste latentie.

Runtime/serverinstellingen (buiten settings.php)

PHP-instellingen (php.ini)

OPcache

opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=192
opcache.max_accelerated_files=16229
opcache.validate_timestamps=0
opcache.revalidate_freq=0
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1
  • opcache.enable: Schakelt OPcache in voor FPM of Apache.
  • opcache.enable_cli: Houdt OPcache uit voor CLI.
  • opcache.memory_consumption: Wijst geheugen toe voor gecompileerde scripts.
  • opcache.max_accelerated_files: Stelt de grootte van de hashtabel in.
  • opcache.validate_timestamps: Controleert bestandstijdstempels op wijzigingen. Stel in op 0 voor build-once deployments.
  • opcache.revalidate_freq: Stelt het aantal seconden tussen tijdstempelcontroles in wanneer validate_timestamps = 1.
  • opcache.interned_strings_buffer: Wijst geheugen toe voor gedeelde strings.
  • opcache.fast_shutdown: Maakt snellere request shutdown mogelijk.

APCu

apc.enabled=1
apc.enable_cli=0
apc.shm_size=128M
apc.ttl=0
apc.gc_ttl=3600
  • apc.enabled: Schakelt APCu in voor FPM.
  • apc.enable_cli: Houdt APCu uit voor CLI.
  • apc.shm_size: Stelt het totale gedeelde geheugen in.
  • apc.ttl: Stelt de standaard TTL voor items in.
  • apc.gc_ttl: Stelt de tijd in om weesitems te bewaren.

Redis server (redis.conf)

maxmemory 2gb
maxmemory-policy allkeys-lru
timeout 1
tcp-keepalive 60
  • maxmemory: Stelt de geheugenlimiet in.
  • maxmemory-policy: Stelt het verwijderingsgedrag in wanneer vol.
  • timeout: Stelt de idle client timeout in seconden in.
  • tcp-keepalive: Stelt het interval voor keepalive probes in.

Memcached server (flags)

memcached -m 2048 -I 4m -f 1.25 -o slab_reassign,slab_automove
  • -m: Stelt het totale geheugen in MB in.
  • -I: Stelt de maximale itemgrootte in.
  • -f: Stelt de groeifactor voor slab-klassen in.
  • -o slab_reassign,slab_automove: Schakelt slab-herverdeling in.

Sizing snelle regels

CacheSleutelinstellingSnelle regel (MB)
OPcacheopcache.memory_consumptionMB = (codebase_MB × 3) + 32
OPcacheopcache.max_accelerated_files≈ 1,5 × PHP-bestanden (gebruik 10000, 16229, 32531)
APCuapc.shm_sizeMB ≈ (sleutels × (gemiddelde_item_bytes + 100) × 1,2) ÷ 1.000.000
RedismaxmemoryMB ≈ (items × (gemiddelde_item_bytes + 50) × 1,3) ÷ 1.000.000
Memcached-mMB ≈ (items × gemiddelde_item_bytes × 1,3) ÷ 1.000.000
Memcached-IBegin met 4 MB; verhoog indien nodig

Veelvoorkomende mythen

  1. Mythen: OPcache cacht HTMLWaarheid: Het cacht gecompileerde PHP-code.
  2. Mythen: APCu werkt tussen serversWaarheid: Het is lokaal voor één serverproces.
  3. Mythen: Redis is altijd beter dan MemcachedWaarheid: Kies op basis van behoeften.
  4. Mythen: Cache misses betekenen dat er iets kapot isWaarheid: Misses gebeuren en warmen op met verkeer.

Snelle setup checklist

  • OPcache:
    • Schakel de extensie in PHP in.
    • Tune geheugengrootte en hervalidatie-instellingen voor productie.
    • Zorg voor voldoende opcache.memory_consumption om uw codebase te bevatten.
  • APCu:
    • Installeer de PHP-extensie.
    • Bevestig CLI- en FPM-instellingen als u beide uitvoert.
    • Zet apc.shm_size met ruimte om verwijderingen te voorkomen.
  • Redis:
    • Installeer de server en PHP-extensie.
    • Voeg de Drupal Redis-module toe en wijs de juiste cache bins toe.
    • Stel client timeouts in en overweeg sessies, locks en wachtrijen.
  • Memcached:
    • Installeer de server en PHP-extensie.
    • Voeg de Drupal Memcache-module toe en wijs de gewenste bins toe.
    • Stel -I in voor maximale itemgrootte; zorg ervoor dat de app cacheverlies tolereert.

Vermijd deze valkuilen

  • Vermijd het mengen van Redis en Memcached voor dezelfde bin.
  • Vermijd onderdimensionering van caches. Houd verwijderingen en hit rate in de gaten.
  • Vermijd over-caching. Concentreer u op dure, herbruikbare gegevens.
  • Vermijd het breken van invalidatie. Respecteer cache tags en contexten.

Hoe succes te meten

  • Responstijdtrends: De tijd tot de eerste byte moet na opwarming dalen.
  • Databasebelasting: Minder queries per request en lagere CPU op de database.
  • Hit ratio: Houd cache hit rates bij. Als hit rates laag blijven, controleer dan de bin-toewijzing en TTLs.
  • Foutlogs: Let op verbindingsfouten of timeouts van Redis of Memcached.

Laatste gedachten

Begin met OPcache, voeg APCu toe, dan Redis of Memcached voor gedeelde bins. Houd het simpel, meet de resultaten en tune.