
💡 Kuinka vähentää palvelimen kuormitusta ja nopeuttaa WordPressiä Memcachedilla
WordPress-sivusto ilman välimuistia muistuttaa moottoria, joka lämpenee alusta joka liikennevaloissa. Vierailija saapuu sivulle, PHP kokoaa sen alusta alkaen ja tekee 30-60 tietokantakyselyä. Kymmenen samanaikaista vierailijaa tarkoittaa kolmeasataa kyselyä. Viisikymmentä vierailijaa luo vyöryn, joka saa palvelimen katkaisemaan yhteyksiä nopeammin kuin ehdit kirjoittaa komentoa konsolissa.
Ongelma ei ole WordPress itsessään. Sivujen dynaaminen kokoaminen on oletuksena luonnostaan tehotonta; lähes jokainen CMS toimii näin. Ratkaisu on todistettu vuosien käytössä suuren kuorman projekteissa: objektien välimuistitus RAM-muistissa Memcachedin avulla. Oikein määritetty Memcached-kerros muuttaa palvelimen, joka tukehtuu viiteenkymmeneen samanaikaiseen käyttäjään, koneeksi, joka käsittelee satoja ilman millisekunnin viivettä vasteajassa.
Käymme läpi koko asennussyklin: taustapalvelun asennuksesta kuormitustestiin, joka näyttää eron numeroina. Kaikki komennot on testattu Ubuntu 22.04/24.04:llä ja AlmaLinux 9:llä, ja ne ovat yhteensopivia PHP 8.2-8.5:n kanssa.
💡 Pikakatsaus:
- Asenna Memcached-taustapalvelu ja sido se localhostiin turvallisuuden vuoksi
- Käännä PHP:n memcached-laajennus PECL:n kautta PHP-versiollesi
- Sijoita Automatticin object-cache.php-pudotustiedosto wp-content-hakemistoon
- Asenna Batcache ja määritä advanced-cache.php sivuvälimuistia varten
- Tarkista vastausotsikot selaimen kehittäjätyökaluilla
- Suorita kuormitustesti k6:lla ja vertaa tuloksia ennen ja jälkeen
Mitä Memcached on ja miksi WordPress tarvitsee sitä
Memcached on taustapalvelu, joka tallentaa dataa ja objekteja palvelimen RAM-muistiin. Toisin kuin tiedostopohjainen välimuistitus (WP Super Cache, W3 Total Cache, WP Rocket), joka kirjoittaa valmista HTML:ää levylle, Memcached toimii yhtä tasoa alempana: tietokantakyselyjen tulokset, kootut valikot, vimpaimet ja sivuston asetukset asettuvat RAM-muistiin ja ne voidaan hakea mikrosekunneissa ilman uudelleenkokoamista.
Käytännössä kuva näyttää tältä. Tyypillinen WordPress-sivu ilman välimuistia tekee 30-60 kyselyä MySQL:ään. Kun 50 samanaikaista vierailijaa on paikalla, tietokanta saa puolitoista, kolmetuhatta kyselyä, ja suoritin menee vikatilaan. Memcached sieppaa valtaosan näistä kyselyistä RAM-tasolla: tietokanta lepää, suoritin pysyy vapaana ja palvelin vastaa välittömästi.
Teknisesti Memcached toimii avain-arvo-pareilla. Avain on SQL-kyselyn tiiviste; arvo on sarjallistettu tulos. Kun WordPress kokoaa saman sivun uudelleen, se kysyy ensin Memcachedilta: "Onko sinulla tätä avainta?" ja saa melkein aina valmiin vastauksen ilman yhtäkään levyhakua.
Teknologia syntyi vuonna 2003 LiveJournalissa ratkaisuna äärimmäisiin tietokannan kuormitusongelmiin. Nykyään WordPress.com, Wikipedia, Twitter ja tuhannet suuren kuorman projektit toimivat Memcachedilla. Se on kypsä, vakaa ja ennustettava: juuri sitä mitä tuotanto tarvitsee.
Memcached-taustapalvelun asentaminen
Käsittelemme kaksi pääskenaariota: Ubuntu (22.04/24.04) apt-työkalulla ja AlmaLinux / Rocky Linux 9 dnf-työkalulla. Mukauta komennot omaan jakeluusi.
Ubuntussa:
1 sudo apt update && sudo apt install memcached libmemcached-tools -y
AlmaLinux / Rocky Linux 9:ssä:
1 sudo dnf install memcached libmemcached -y
Asennuksen jälkeen taustapalvelu käynnistyy automaattisesti. Tarkista:
1 systemctl status memcached
Oletuksena Memcached kuuntelee porttia 11211 kaikilla verkkoliitännöillä. Tämä on tietoturva-aukko: välimuistisi on kaikkien saavutettavissa, jotka pääsevät tuohon porttiin ulkopuolelta. Sido siksi taustapalvelu localhostiin ensin.
Avaa asetustiedosto (/etc/memcached.conf Ubuntussa, /etc/sysconfig/memcached AlmaLinuxissa) ja varmista, että rivi -l 127.0.0.1 on läsnä eikä kommentoitu. Käynnistä taustapalvelu uudelleen:
1 sudo systemctl restart memcached
PHP-laajennuksen kääntäminen PECL:n kautta
Pelkkä taustapalvelu ei nopeuta WordPressiä; tarvitset PHP-asiakkaan, joka opettaa PHP:n kommunikoimaan Memcachedin kanssa. Asenna memcached-laajennus (huomaa: nimenomaan memcached d-kirjaimella, ei memcache). Jälkimmäinen poistettiin PHP:stä versiosta 8.0 alkaen, eikä sitä tule käyttää.
Ubuntussa asenna ensin käännöstyökalut. Korvaa PHP-versiosi: php8.4-dev, php8.3-dev tai php8.2-dev:
1 sudo apt install php8.4-dev php-pear libmemcached-dev pkg-config make gcc -y
Käännä sitten laajennus:
1 sudo pecl install memcached
AlmaLinuxilla / Rocky Linux 9:llä komentosarja on samankaltainen:
1 sudo dnf install php-devel php-pear libmemcached-devel make gcc -y 2 sudo pecl install memcached
Kääntämisen jälkeen laajennus on rekisteröitävä PHP:ssä. Luo INI-tiedosto:
1 echo "extension=memcached.so" | sudo tee /etc/php/8.4/mods-available/memcached.ini 2 sudo phpenmod memcached
AlmaLinuxilla polku on eri: /etc/php.d/memcached.ini.
Jos työskentelet Plesk Obsidianissa, komento PHP-käsittelijöiden uudelleenlataamiseksi laajennuksen asennuksen jälkeen:
1 plesk bin php_handler --reread
Varmista, että laajennus latautui:
1 php -m | grep memcached
Tulosteessa pitäisi näkyä memcached. Jos se on tyhjä, tarkista INI-tiedoston polku ja käynnistä PHP-FPM uudelleen: sudo systemctl restart php8.4-fpm.
WordPressin yhdistäminen Memcachediin
Taustapalvelu on asennettu; PHP-laajennus on ladattu. Nyt sinun täytyy yhdistää WordPress Memcachediin sovellustasolla.
Alan de facto -standardi on nykyään Automatticin virallinen drop-in: wp-memcached GitHubissa. Sen ovat kirjoittaneet samat kehittäjät, jotka ylläpitävät Batcachea ja WordPress.comia, ja se toimii oikein PHP 8.x:n (mukaan lukien 8.4 ja 8.5) kanssa.
Kopioi repositoriossa oleva object-cache.php-tiedosto sivustosi /wp-content/-kansioon. WordPress tunnistaa sen automaattisesti ja alkaa käyttää Memcachedia objektivälimuistin taustajärjestelmänä ilman erillisiä lisäosia.
Jos Memcached-portti poikkeaa oletuksesta (11211), lisää seuraava wp-config.php-tiedostoon:
1 $memcached_servers = array( 2 array( '127.0.0.1', 11211 ) 3 );
Sivuvälimuistitus: Batcache
Objektivälimuistitus on puoli voittoa. Toinen puoli on valmiiden HTML-sivujen välimuistittaminen niin, ettei PHP suoritu lainkaan anonyymeille kävijöille. Tässä kohtaa astuu kuvaan Batcache, Automatticin lisäosa, joka tallentaa valmiit sivut samaan Memcachediin.
Periaate on yksinkertainen. Kävijä saapuu sivustolle; Batcache tarkistaa, onko tästä sivusta valmis HTML-kopio Memcachedissa. Jos on eikä se ole vanhentunut, se tarjoillaan välittömästi ohittaen koko PHP- ja MySQL-ketjun. Jos ei ole, tai jos kävijä on kirjautunut sisään, sivu luodaan uudelleen ja tallennetaan samalla välimuistiin seuraavia käyntejä varten.
Asennus:
Lataa arkisto osoitteesta wordpress.org, pura se ja siirrä advanced-cache.php-tiedosto /wp-content/-hakemiston juureen. Avaa sitten wp-config.php ja lisää rivi, joka ottaa välimuistin käyttöön:
1 define( 'WP_CACHE', true );
Lähetä batcache.php-tiedosto hakemistoon /wp-content/plugins/ ja aktivoi lisäosa hallintapaneelissa.
advanced-cache.php-tiedoston sisällä on kommenttien alla noin tusina asetusta. Hyödyllisimmät: max_age (sivun elinikä sekunteina, oletus 300 eli 5 minuuttia), seconds (aikaväli saman URL-osoitteen uudelleenluontien välillä) ja unique (älä välimuistita eri User-Agentteja erikseen). Useimmille sivustoille oletusarvot toimivat; säädä niitä vasta, kun ymmärrät miksi.
Tärkeä vivahde: varmista, että define( 'WP_CACHE', true ) on ENNEN riviä require_once ABSPATH . 'wp-settings.php' tiedostossa wp-config.php. Jos se on rivin jälkeen, välimuistitus ei aktivoidu ja WordPress jättää sen hiljaisesti huomiotta.
Video: asennus ja konfigurointi alusta loppuun
Teoria on perusta, mutta konsolikomennot on parasta nähdä kerran. Tämä video kattaa koko syklin objektivälimuistin määrittämisestä WordPressille Redis- ja Memcached-ratkaisuilla, taustapalvelun asennuksesta tuloksen varmentamiseen:
Varmistetaan, että Memcached toimii
Paras testi on käytännön testi. Lisää mukautettu otsake advanced-cache.php-tiedostoon, jotta näet silmämääräisesti, tarjottiinko sivu välimuistista vai luotiinko se uudelleen.
Etsi tämä rivi advanced-cache.php-tiedostosta:
1 var $headers = array();
Korvaa se tällä:
1 var $headers = array( 'memcached' => 'activated' );
Avaa nyt selaimen DevTools (F12), siirry Network-välilehdelle ja lataa sivu useita kertoja uudelleen. Response Headers -osiossa näet kentän memcached: activated, mikä tarkoittaa, että Batcache toimi ja sivu meni asiakkaalle suoraan RAM-muistista.
Toinen tapa hyödyntää palvelimen komentoriviä. Katso taustaprosessin tilastot:
1 echo "stats" | nc 127.0.0.1 11211
Etsi tulosteesta get_hits ja get_misses. Jos get_hits kasvaa, kun päivität sivuston sivuja selaimessa, Memcached palvelee välimuistissa olevia objekteja luotettavasti.
Kuormitustestaus: numeroita, ei vaikutelmia
Memcached näyttää todellisen arvonsa paineen alla. Alkuperäinen testi palvelimella, jossa oli 1 ydin ja 512 Mt muistia, tuotti vaikuttavan kontrastin: ilman Memcachedia palvelin kaatui 15 sekunnin jälkeen 50 samanaikaisella käyttäjällä; Memcachedin kanssa se kesti yli 400 käyttäjää 50 sekuntia ilman yhtäkään virhettä. Tämä ei ole taikuutta vaan fysiikkaa: kun suoritin ei käytä jaksoja samojen sivujen uudelleenkokoamiseen, se palvelee uusia kävijöitä.
Itsetestaukseen käytetään nykyään moderneja työkaluja. Yksi kätevimmistä on k6 Grafanalta (avointa lähdekoodia, toimii yhdellä komennolla). Perustesti:
1 k6 run --vus 100 --duration 30s http://your-site.com/
100 virtuaalikäyttäjää 30 sekunnin ajan. Vertaa tuloksia Batcache pois päältä (kommentoi WP_CACHE pois) ja päällä; onnistuneiden vastausten ja mediaaniviiveen ero mitataan kertaluokissa.
Nopeaan tarkistukseen ilman ohjelmiston asentamista verkkotyökalu Loader.io toimii hyvin; ilmainen taso sallii jopa 10 000 asiakasta testiä kohden, mikä on enemmän kuin tarpeeksi useimmille sivustoille.
Redis vai Memcached: kumpi valita
Väistämättä heräävä kysymys on, miksi ei Redis? Molemmat ovat keskusmuistissa toimivia avain-arvo-tietovarastoja; molemmat toimivat WordPressin kanssa drop-in-tiedostojen kautta. Lyhyt vastaus: puhtaaseen välimuistitukseen Memcached on yksinkertaisempi ja nopeampi; kaikkeen muuhun Redis.
Verrataan olennaisia asioita:
Kriteeri | Memcached | Redis |
|---|---|---|
Tietomalli | Vain merkkijonot | Merkkijonot, listat, setit, tiivisteet, geodata, pub/sub |
Monisäikeistys | Käyttää kaikkia ytimiä suoraan | Pääasiassa yksisäikeinen |
Pysyvyys | Ei mitään (puhdas keskusmuisti) | RDB/AOF (tallentaa levylle) |
WordPress-ekosysteemi | Automattic/wp-memcached + Batcache | Redis Object Cache (yli 400 000 asennusta) |
Asennuksen monimutkaisuus | Minimaalinen | Hieman korkeampi |
Välimuistin tyhjennys uudelleenkäynnistyksessä | Täysi (mutta lämpenee minuuteissa) | Voidaan säilyttää |
WordPress-objektien välimuistitukseen merkkijonoavain-arvo on enemmän kuin riittävä. Redisin ylimääräisiä tietotyyppejä ei täällä tarvita. Get/set-operaatioissa molempia rajoittaa verkon läpisyöttö suorittimen sijaan; muutoin samanlaisina ne ovat tasoissa. Memcached voittaa monisäikeistyksessä: se käyttää kaikkia suoritinytimiä suoraan, kun taas Redis säilyttää pääasiassa yksisäikeisen arkkitehtuurin.
Valitse Redis, jos tallennat myös istuntoja, tehtäväjonoja tai tarvitset pysyvyyttä. Tehtävään "WordPressin nopeuttaminen ja tietokannan kuormituksen keventäminen" Memcached tuottaa tuloksia nopeammin ja vähemmillä liikkuvilla osilla.
⁉️🤔 Usein kysytyt kysymykset
Tarvitsenko Memcachedia jaetulla hostingilla?
Useimmissa jaetun hostingin paketeissa Memcached ei ole saatavilla: palveluntarjoajat eivät anna pääsyä taustaprosessiin palvelintasolla. Jos pakettiisi kuitenkin sisältyy VPS tai dedikoitu palvelin, asennus vie 10-15 minuuttia ja tuottaa yhden huomattavimmista nopeushyödyistä kaikista WordPress-optimoinnin toimenpiteistä. Tarkista pakettisi ominaisuudet hallintapaneelista tai kysy hosting-tuesta.
Batcache vai WP Rocket: kumpi on parempi?
WP Rocket on monitoimityökalu, joka hoitaa sivuvälimuistin (tiedostopohjainen), CSS/JS-optimoinnin ja lazy loadingin. Batcache on kapea työkalu erityisesti Memcached-pohjaiseen sivuvälimuistitukseen. Ne eivät kilpaile; ne täydentävät toisiaan: Batcache toimii palvelintasolla ja tarjoaa sivut käynnistämättä PHP:tä, kun taas WP Rocket toimii sovellustasolla. Käytännössä molempia käytetään usein: Batcache anonyymeille kävijöille, WP Rocket hienosäätöön.
Miten tyhjennän Memcachedin välimuistin?
Yksinkertaisin tapa on käynnistää taustaprosessi uudelleen:
sudo systemctl restart memcached. Välimuisti tyhjenee kokonaan ja alkaa lämmetä uudelleen seuraavilla käynneillä. Kohdennettuun tyhjennykseen käytä Query Monitor -lisäosaa: se näyttää objektivälimuistin sisällön ja sallii yksittäisten avainten tyhjennyksen. On myös konsolivaihtoehto:echo "flush_all" | nc 127.0.0.1 11211.
Miksi sivusto ei nopeutunut object-cache.php:n asennuksen jälkeen?
Yleisin syy on, että PHP-laajennus ei latautunut. Tarkista
php -m | grep memcached. Jos tulos on tyhjä, varmista INI-tiedoston polku ja käynnistä PHP-FPM uudelleen. Toinen yleinen syy:object-cache.php-tiedostoa ei kopioitu hakemistoon/wp-content/tai se kopioitiin käyttöoikeusvirheillä (sen on oltava PHP:tä ajavan käyttäjän luettavissa). Kolmas: Memcached-taustaprosessi ei ole käynnissä; tarkistasystemctl status memcached.
Onko Memcached ristiriidassa OPcachen kanssa?
Ei, nämä ovat eri kerroksia. OPcache tallentaa välimuistiin käännetyn PHP-tavukoodin ja nopeuttaa tulkin käynnistystä. Memcached tallentaa välimuistiin sovellusdataa: tietokantakyselyjen tuloksia. Ne toimivat pyynnön käsittelyn eri vaiheissa ja täydentävät toisiaan hyvin. Tuotannossa molempien käyttöä suositellaan.
Voiko Memcachedia käyttää useiden palvelimien kesken?
Kyllä, tämä on yksi ensisijaisista skenaarioista.
$memcached_servers-konfiguraatiossa voit luetella useita Memcached-taustaprosessien IP-osoitteita, ja asiakas jakaa avaimet automaattisesti niiden kesken. WordPressissäobject-cache.php-drop-in hoitaa tämän: se tukee palvelinpoolia suoraan.
Kannattaako Memcached asentaa palvelimellesi
Memcachedin asentaminen ei ole ihmelääke, mutta yksi tehokkaimmista askelista WordPressin optimoinnissa. Jos sivustosi toimii VPS:llä tai dedikoidulla palvelimella ja haluat sen kestävän moninkertaisen liikenteen kasvun ilman laitteiston vaihtoa, asenna se. Kymmenestä viiteentoista minuuttia konsolityötä, ja tietokanta lakkaa olemasta pullonkaula.
Jos sivusto on jaetulla hostingilla ilman pääsyä taustaprosessiin, harkitse Redisiä (useammin tarjolla) tai tiedostopohjaista välimuistia WP Rocketin kautta. Jos olet jo VPS:llä, avaa pääte ja seuraa yllä olevan pikaoppaan vaiheita. Näet tuloksen ensimmäisessä kuormitustestissäsi.



