@harrasteblogi JUURI NYT
--:--

Tilaa uutiskirje

Saat tuoreimmat 10 uusinta artikkelia kerran viikossa sähköpostiisi.

Tilaa uutiskirje

WordPressin sisäinen cache-järjestelmä selitettynäWordPress käyttää useita eri välimuistikerroksia samanaikaisesti, mutta moni kehittäjä tuntee niistä vain page cachen tai Redisin. Todellisuudessa WordPressissä on sisäinen cache-järjestelmä, joka vaikuttaa lähes kaikkeen: queryihin, metadataan, optioneihin ja objecteihin.

Tiivistelmä
Mitä WordPress cache tarkoittaa

WordPressin cache-järjestelmä voidaan jakaa useaan tasoon:...

Object Cache API

WordPressissä lähes kaikki kulkee object cachen kautta....

Runtime cache (oletus)

Ilman Redisia tai Memcachedia WordPress käyttää:...

Persistent object cache

Kun Redis tai Memcached lisätään:...

Cache groups

WordPress jakaa cachen ryhmiin:...

Non-persistent groups

Joitain grouppeja ei koskaan tallenneta pysyvästi:...

WP_Query ja object cache

Kun WP_Query suoritetaan:...

Metadata cache

Kun post haetaan:...

Options cache

wp_options on erittäin cache-riippuvainen....

Autoloaded options

Ongelma syntyy kun:...

Transients API

Transients on WordPressin “kevyt cache API”....

Transient vs object cache

Vaikein osa cache-järjestelmiä....

Cache invalidation

Vaikein osa cache-järjestelmiä....

Post cache invalidation

Kun post päivitetään:...

Query cache

WP_Query hyödyntää object cachea epäsuorasti....

REST API cache

WordPress ei oletuksena cacheta REST-vastauksia kunnolla....

Fragment cache

Voit cachettaa osia HTML:stä:...

Cache stampede ongelma

Kun cache vanhenee:...

Redis object cache WordPressissä

Redis nopeuttaa erityisesti:...

Cache layers käytännössä

Moderni WordPress käyttää yleensä:...

Mitä EI pidä cachettaa

Hyvä object cache:...

Cache hit ratio

Hyvä object cache:...

Yleisimmät cache-ongelmat

Moderni WordPress stack:...

Paras cache-arkkitehtuuri

Moderni WordPress stack:...

Yhteenveto

WordPressin sisäinen cache-järjestelmä on paljon enemmän kuin pelkkä page cache. Object cache, metadata cache, options cache ja transientit muodostavat kerroksellisen järjestelmän, joka vaikuttaa lähes kaikkiin...

Kun tämän rakenteen ymmärtää, suorituskyvyn optimointi muuttuu huomattavasti tehokkaammaksi.

Mitä WordPress cache tarkoittaa

WordPressin cache-järjestelmä voidaan jakaa useaan tasoon:

Browser Cache
↓
CDN / Edge Cache
↓
Page Cache
↓
Object Cache
↓
Database

WordPressin “sisäinen cache” viittaa yleensä:

  • Object Cache APIin
  • transientteihin
  • runtime cacheen

Object Cache API

WordPressissä lähes kaikki kulkee object cachen kautta.

Keskeiset funktiot:

wp_cache_get()
wp_cache_set()
wp_cache_delete()

Esimerkki:

wp_cache_set('user_1', $data, 'users', 3600);

$data = wp_cache_get('user_1', 'users');

Runtime cache (oletus)

Ilman Redisia tai Memcachedia WordPress käyttää:

non-persistent in-memory cache

Tämä tarkoittaa:

  • cache toimii vain yhden requestin ajan
  • seuraava request aloittaa tyhjästä

Silti tämä vähentää duplicate queryjä requestin sisällä.

Persistent object cache

Kun Redis tai Memcached lisätään:

WordPress → Redis → Database

Cache säilyy requestien välillä.

Hyödyt:

  • vähemmän DB-queryjä
  • nopeampi admin
  • nopeampi frontend
  • parempi skaalautuvuus

Cache groups

WordPress jakaa cachen ryhmiin:

wp_cache_set($key, $data, 'posts');

Tyypillisiä grouppeja:

  • posts
  • users
  • terms
  • options

Non-persistent groups

Joitain grouppeja ei koskaan tallenneta pysyvästi:

wp_cache_add_non_persistent_groups();

Näitä käytetään request-kohtaiseen dataan.

WP_Query ja object cache

Kun WP_Query suoritetaan:

$query = new WP_Query([...]);

WordPress cachettaa:

  • post objectit
  • metadata
  • taxonomyt

Tämä vähentää duplicate SELECTejä.

Metadata cache

Kun post haetaan:

get_post_meta($id);

Meta cache ladataan usein automaattisesti.

Tämä estää:

N+1 query problem

Options cache

wp_options on erittäin cache-riippuvainen.

get_option('siteurl');

Options cache on yksi tärkeimmistä WordPressin optimoinneista.

Autoloaded options

Ongelma syntyy kun:

autoload = yes

liikaa dataa.

Kaikki autoloaded optionit ladataan jokaisella requestilla.

Huono tilanne:

10MB autoload data

Transients API

Transients on WordPressin “kevyt cache API”.

set_transient('key', $data, 3600);

Luku:

$data = get_transient('key');

Ilman Redisia:

  • tallentuu DB:hen

Redisin kanssa:

  • tallentuu memoryyn

Transient vs object cache

Object cache

  • request-level API
  • low-level cache

Transient

  • expiration built-in
  • helpompi käyttää

Cache invalidation

Vaikein osa cache-järjestelmiä.

WordPress invalidioi automaattisesti paljon:

save_post()
clean_post_cache()

Mutta custom cache pitää invalidioida itse.

Post cache invalidation

Kun post päivitetään:

clean_post_cache($post_id);

Tämä poistaa:

  • post objectit
  • metadata
  • taxonomy cachet

Query cache

WP_Query hyödyntää object cachea epäsuorasti.

Mutta monimutkaiset meta_queryt:

  • eivät aina hyödy hyvin cachetuksesta

REST API cache

WordPress ei oletuksena cacheta REST-vastauksia kunnolla.

Usein tarvitaan:

  • transient cache
  • Redis layer
  • edge cache

Fragment cache

Voit cachettaa osia HTML:stä:

$cached = wp_cache_get('hero_section');

if (!$cached) {

    $cached = render_hero();

    wp_cache_set('hero_section', $cached);
}

echo $cached;

Cache stampede ongelma

Kun cache vanhenee:

100 requestia regeneroi saman datan

Ratkaisut:

  • locking
  • stale cache
  • background regeneration

Redis object cache WordPressissä

Redis nopeuttaa erityisesti:

  • WooCommerce
  • isot sivustot
  • membership-sivut
  • multisite-ympäristöt

Cache layers käytännössä

Moderni WordPress käyttää yleensä:

Browser cache
↓
CDN cache
↓
Page cache
↓
Redis object cache
↓
MySQL

Mitä EI pidä cachettaa

  • nonce data
  • user-specific HTML
  • checkout state
  • session data ilman variaatiota

Cache hit ratio

Hyvä object cache:

90–99% hit ratio

Huono:

paljon miss-tapauksia

Yleisimmät cache-ongelmat

  • liikaa autoloaded options
  • invalidointi puuttuu
  • transient-spämmi
  • object cache ilman strategiaa
  • cachettamaton REST API
  • user-specific cache leak

Paras cache-arkkitehtuuri

Moderni WordPress stack:

  • Edge cache/CDN
  • NGINX FastCGI cache
  • Redis object cache
  • OPcache
  • transient strategy
  • targeted invalidation

Yhteenveto

WordPressin sisäinen cache-järjestelmä on paljon enemmän kuin pelkkä page cache. Object cache, metadata cache, options cache ja transientit muodostavat kerroksellisen järjestelmän, joka vaikuttaa lähes kaikkiin WordPress-requesteihin.

Kun nämä kerrokset ymmärretään ja niitä käytetään oikein yhdessä Redisin ja edge-cachen kanssa, WordPress pystyy käsittelemään erittäin suuria liikennemääriä tehokkaasti.

🍪