Technikai

Objektum-gyorsítótár (Redis) WordPressben: mikor éri meg, mikor okoz hibát

Objektum-gyorsítótár (Redis) WordPressben: mikor éri meg, mikor okoz hibát. Oldal- vs objektum-gyorsítótár, bevezetési lépések, hit rate, tipikus bajok.

Scheo · · olvasási idő ~10 perc · Szerző: Schmidt Péter

Röviden: Az oldal-gyorsítótár kész HTML-t tárol, az objektum-gyorsítótár (Redis, Memcached) az adatbázis-lekérdezések eredményét, ezért csak ott hoz valódi eredményt, ahol sok bejelentkezett felhasználó, kosár, tagsági terület vagy lekérdezés-nehéz logika van. Bekapcsolás előtt és után mérj, különben csak egy újabb hibaforrást szereltél az oldalra.
Kulcs tanulságok
  • Az oldal-gyorsítótár a kijelentkezett látogatót gyorsítja, az objektum-gyorsítótár a bejelentkezett felhasználót és az admint.
  • Redis vagy Memcached akkor térül meg, ha kérésenként sok száz adatbázis-lekérdezés fut: WooCommerce, tagsági oldal, nagy taxonómia, sok bővítmény.
  • A 90% alatti találati arány szinte mindig memóriahiányt, túl rövid élettartamot vagy egy rosszul viselkedő bővítményt jelez.
  • A leggyakoribb hibák: elavult adat a kosárban, munkamenet-keveredés közös Redis adatbázisnál, elmaradt ürítés frissítés után, szűk memórialimit megosztott tárhelyen.
  • Mérés előtte és utána (lekérdezésszám, SQL-idő, bejelentkezett TTFB) nélkül ne kapcsold be: ez döntés, nem beállítás.

Egy lassú WordPress oldalnál a leggyakoribb reflex, hogy bekapcsolunk valamilyen gyorsítótárat, aztán remélünk. A gond az, hogy a gyorsítótár szó legalább négy különböző dolgot jelent (böngésző-oldali tárolás, CDN, oldal-gyorsítótár, objektum-gyorsítótár), és ezek egymástól teljesen eltérő helyen segítenek. Az objektum-gyorsítótár, vagyis a Redis vagy a Memcached bevonása az egyik leghatásosabb eszköz, ha az oldalad tényleg sokat beszél az adatbázissal. Ha viszont nem, akkor egy újabb réteg, ami elromolhat, és amit senki nem fog gyanúba venni, amikor a kosár rosszul viselkedik.

Objektum-gyorsítótár (Redis) WordPressben: mikor éri meg, mikor okoz hibát
Objektum-gyorsítótár (Redis) WordPressben: mikor éri meg, mikor okoz hibát

Mi a különbség az oldal-gyorsítótár és az objektum-gyorsítótár között?

Az oldal-gyorsítótár kész HTML-t tárol egy URL-hez, az objektum-gyorsítótár pedig az oldal felépítése közben keletkező adatokat, tipikusan adatbázis-lekérdezések eredményét. Az egyik a végeredményt spórolja meg, a másik a munkát közben.

Hivatalosan igazolt: a WordPress magja tartalmaz egy objektum-gyorsítótár réteget (WP_Object_Cache, a wp_cache_get() és wp_cache_set() függvényekkel), de ez alapállapotban csak egyetlen kérés idejére él. Amint a PHP-folyamat lefut, minden eltűnik. Perzisszé, vagyis kérések között is megmaradóvá egy úgynevezett drop-in fájl teszi: a wp-content/object-cache.php, amit a Redis- vagy Memcached-bővítmény telepít. Ettől kezdve az wp_options autoload sorai, a taxonómia-adatok, a tranziensek és a lekérdezés-eredmények a memóriából jönnek.

A gyakorlati különbség ott válik élessé, ahol az oldal-gyorsítótár nem tud dolgozni. Bejelentkezett felhasználónál, nem üres kosárnál, fizetési folyamatban, tagsági területen és az adminban a jól beállított oldal-gyorsítótár szándékosan kimarad, mert személyre szóló tartalmat nem tárolhat közösen. Ilyenkor minden kérés teljes PHP-futást és teljes adatbázis-kört jelent. Pont ezt a kört tudja lerövidíteni az objektum-gyorsítótár.

Fordítva is igaz: egy bemutatkozó oldalon, ahol napi néhány száz kijelentkezett látogató jön, és az oldal-gyorsítótár szinte mindent lefed, a Redis lényegében semmit nem gyorsít. A látogató úgyis egy statikus HTML-t kap, oda se PHP, se SQL nem fut.

Milyen oldalnál hoz valódi eredményt a Redis vagy a Memcached?

Röviden: ott, ahol kérésenként sok adatbázis-lekérdezés fut, és ahol a látogatók nagy része nem kaphat közös HTML-t. Négy tipikus eset:

Szakmai feltételezés: a Redis és a Memcached közti választás egy átlagos magyar WordPress oldalon másodrangú kérdés. A Redis mellett szól, hogy a WordPress-ökoszisztéma bővítményei jobban támogatják, tud lemezre írni, és többféle adatszerkezettel dolgozik. A Memcached egyszerűbb és több szálon fut. A mért különbséget a legtöbb esetben inkább a kapcsolat módja (Unix socket vagy TCP), a PHP-kiterjesztés (phpredis a natív, a tisztán PHP-ben írt kliens lassabb) és a bővítmény minősége adja, nem maga a szerver.

Hogyan vezesd be az objektum-gyorsítótárat lépésről lépésre?

Az alábbi sorrend szándékosan a méréssel kezdődik és a méréssel végződik. Ha a nulladik lépést kihagyod, később nem fogod tudni megmondani, hogy a Redis segített-e vagy csak elhitted.

  1. Nulladik lépés: alapmérés. Query Monitorral jegyezd fel három reprezentatív oldalon (főoldal, kategória vagy terméklista, kosár vagy fiók), bejelentkezve és kijelentkezve: a lekérdezések számát, az SQL-időt, a PHP-időt és a memóriahasználatot. Mellé a bejelentkezett TTFB-t. Írd le, ne csak nézd meg.
  2. Tárhely-oldali elérhetőség ellenőrzése. Kell egy futó Redis vagy Memcached szolgáltatás, és kell hozzá PHP-kiterjesztés. Ellenőrzés parancssorból:

php -m | grep -i -E 'redis|memcach'

redis-cli -h 127.0.0.1 -p 6379 ping

Ha az első semmit nem ír ki, a bővítmény hiába lesz feltelepítve. Megosztott tárhelynél gyakran a szolgáltató panelján (cPanel, Plesk, ispmanager) kell külön bekapcsolni, és sokszor nem TCP-porton, hanem Unix socketen érhető el. Kérdezd meg írásban a szolgáltatót: van-e dedikált példány vagy adatbázis-szám, mennyi a memórialimit, és mi a kiürítési szabály.

  1. Bővítmény és beállítás. Egy darab objektum-gyorsítótár bővítmény legyen aktív, ne kettő. A wp-config.php-ban a lényeges sorok:

define( 'WP_REDIS_HOST', '127.0.0.1' );

define( 'WP_REDIS_PORT', 6379 );

define( 'WP_REDIS_DATABASE', 3 );

define( 'WP_CACHE_KEY_SALT', 'oldalneve_hu_' );

A WP_REDIS_DATABASE és a WP_CACHE_KEY_SALT nem díszítés. Ha ugyanazon a gépen több oldal használja ugyanazt a Redis példányt, ez a kettő választja el őket egymástól.

  1. A kapcsolat tesztje. A bővítmény felületén kapcsold be, majd ellenőrizd, hogy létrejött-e a wp-content/object-cache.php, és hogy a státusz csatlakozottat ír. Parancssorból is nézd meg, mert a webkiszolgáló és a WP-CLI nem mindig ugyanazzal a felhasználóval és útvonallal fut:

wp redis status

wp cache flush

  1. Utómérés ugyanazon az oldalakon. Ugyanaz a három URL, ugyanaz a négy szám. Ha a lekérdezésszám nem esett érdemben, vagy a bejelentkezett TTFB nem lett jobb, akkor nálad ez most nem hozott hasznot, és jogos döntés kikapcsolni.

Mit jelent a találati arány, és mi a gond a 90% alatti értékkel?

A találati arány (hit rate) azt mutatja, hogy a gyorsítótárból kért adatoknak mekkora része volt tényleg ott. A bővítmények kiírják, de érdemes a szerver oldaláról is ellenőrizni:

redis-cli info stats | grep -E 'keyspace_hits|keyspace_misses|evicted_keys|expired_keys'

redis-cli info memory | grep -E 'used_memory_human|maxmemory_human'

A számítás egyszerű: találatok osztva a találatok és tévedések összegével. Saját tapasztalat: egy bejáratott, néhány órája futó oldalon a 95% feletti arány a normális. A 90% alatti érték nem magában baj, hanem tünet, és általában az alábbi öt ok valamelyikére vezet vissza:

A találati arány tehát diagnosztikai eszköz, nem cél. Hajszolni értelmetlen: attól, hogy 97%-ra vitted, még nem lett jobb a felhasználói élmény, ha a lassúságot eredetileg egy külső API-hívás vagy egy indexelés nélküli egyedi tábla okozta.

Milyen hibák szoktak előjönni objektum-gyorsítótár bekapcsolása után?

A bajok többsége nem lassulás, hanem elavult vagy összekeveredett adat, és ez sokkal nehezebben észrevehető. A leggyakoribbak:

Mikor NE kapcsold be, és miért ez a szigorúbb álláspont?

Saját nézőpont: objektum-gyorsítótárat csak akkor kapcsolj be, ha van méréssel alátámasztott előtte és utána állapot. Aki mérés nélkül kapcsolja be, az nem gyorsított, hanem szerzett egy újabb réteget, amit hat hónap múlva senki nem fog gyanúba venni, amikor a pénztár hibázik.

Konkrétan hagyd ki, ha:

Szakmai feltételezés: a sebesség és a keresési láthatóság között van összefüggés, de az objektum-gyorsítótár önmagában nem javít helyezést, és nem garantál semmilyen eredményt. Ami mérhető, az a bejelentkezett felhasználók és az admin gyorsulása, illetve a szerver terhelésének csökkenése csúcsidőben. A kijelentkezett látogató által érzékelt betöltési idő nagy részét jó eséllyel a front-end (képek, szkriptek, betűtípusok) adja, azt pedig a Redis nem érinti.

Milyen ellenőrzőlistán menj végig bevezetés előtt és után?

Bevezetés előtt:

Bevezetés után, az első két hétben:

Források és további olvasnivalók

Gyakori kérdések

Kell-e objektum-gyorsítótár, ha már van oldal-gyorsítótárám?

Nem automatikusan. A kettő máshol dolgozik: az oldal-gyorsítótár a kijelentkezett látogatót gyorsítja kész HTML-lel, az objektum-gyorsítótár a bejelentkezett felhasználót, a kosarat és az admint. Ha az oldalad szinte csak kijelentkezett látogatót fogad, a Redis jó eséllyel semmit nem ad hozzá.

Redis vagy Memcached legyen?

Ami a tárhelyeden tényleg elérhető és natív PHP-kiterjesztéssel fut. A WordPress-bővítmények támogatása Redisnél szélesebb, de a mért különbség egy átlagos oldalon kicsi. A kapcsolat módja és a memórialimit többet befolyásol, mint a szerver típusa. Ez a rész szakmai feltételezés, nem hivatalos állítás.

Mit tegyek, ha a találati arány 80% körül áll be?

Először a kiszorított kulcsokat nézd meg az INFO stats kimenetében. Ha nőnek, kevés a memória. Ha nem nőnek, nézd meg az élettartam-beállítást, és hogy nem ürít-e valamilyen ütemezett feladat túl gyakran. Utána keresd meg, melyik bővítmény ír folyamatosan tranzienst.

Miért látszik régi tartalom bővítményfrissítés után?

Mert a memóriában maradt opciók ütköznek a friss kóddal. Frissítés, migrálás és adatbázis-visszaállítás után üríteni kell az objektum-gyorsítótárat, és külön a PHP OPcache-t is. A kettő nem ugyanaz, és a bővítmény ürítő gombja tipikusan csak az egyiket érinti.

Használható megosztott tárhelyen?

Használható, de óvatosan. Kérdezd meg írásban, dedikált példányt kapsz-e, mennyi memóriával és milyen kiürítési szabállyal. Ha közös példányon osztoznál más oldalakkal, külön adatbázis-szám és külön kulcs-előtag nélkül ne kapcsold be, mert ott már adatkeveredés a kockázat, nem csak lassulás.

Javítja-e a keresési helyezésemet?

Önmagában nem, és garantálni sem lehet. Ami mérhető, az a bejelentkezett felhasználók gyorsulása és a szerver terhelésének csökkenése. A kijelentkezett látogató által érzékelt betöltési időt nagyrészt a front-end erőforrások adják, azokat az objektum-gyorsítótár nem érinti.

Források és további olvasnivalók

Ezen az oldalon a hivatalosan igazolt információt elsődleges forrásokból építjük fel; a saját tapasztalatot és a szakmai becslést mindig külön jelöljük a szövegben.

A cikk szerzője

Schmidt Péter, online marketing szakértő, a Scheo Tanácsadó Kft. alapítója. Székesfehérvárról, országosan dolgozó csapattal végzünk keresőoptimalizálást, AI-láthatóság mérést, Google és Meta hirdetéskezelést, weboldalkészítést. Amit itt leírunk, azt ügyfélmunkában is használjuk. Rólunk bővebben · Szolgáltatásaink

Kapcsolódó olvasnivaló

Kapcsolódó

admin-ajax.php terhelés: hogyan találd meg, melyik bővítmény zabálja a szervert

Kapcsolódó

Amikor az AI-botok megterhelik a szervert: mit tegyél

Helyi szolgáltatás a környékeden

Országosan dolgozunk, online és személyesen. Válaszd ki a városodat, és nézd meg, hogyan segítünk helyben:

Online marketing & AI SEO VeszprémOnline marketing & AI SEO DunaújvárosOnline marketing & AI SEO GyőrOnline marketing & AI SEO DebrecenOnline marketing & AI SEO SzegedOnline marketing & AI SEO Miskolc

Weboldalkészítés városra bontva

Ha először a honlap kell, itt városonként arról írtunk:

Weboldalkészítés KecskemétWeboldalkészítés NyíregyházaWeboldalkészítés SzombathelyWeboldalkészítés SzolnokWeboldalkészítés TatabányaWeboldalkészítés Kaposvár

Mind a 20 városunk és az összes szolgáltatás →

15 perces AI-láthatósági gyorselemzés - díjmentesen

Megnézzük három, számodra fontos keresőkérdésnél, hogy megjelenik-e a céged a ChatGPT, a Gemini és a Google AI-válaszaiban, mely versenytársakat ajánlják helyetted, és melyik három területen érdemes először javítani. A weboldaladat előzetesen átnézzük, tehát nem sablonos, automata riportot kapsz.

Adataidat kizárólag a kapcsolatfelvételhez használjuk. Kapcsolat: m@rketinges.hu
💬 Konzultáció