Predpomnjenje in memcached. Uporaba memcached v php phpMemcachedAdmin - spremljanje, statistika in upravljanje Memcached

Na spletu je veliko informacij o tej temi, vendar se jih kljub temu mnogi izogibajo. Namen te objave je na prvi pogled razložiti osnove interakcije z Memcached.

Kaj je Memcache in kaj ima opraviti s PHP?

Memcache je zasnovan za predpomnilnik podatkov, ki zahtevajo veliko virov za ustvarjanje. Tovrstni podatki lahko vsebujejo karkoli, od rezultatov poizvedbe baze podatkov do težkega dela predloge. Memcached ni vključen v osnovni nabor modulov, ki prihajajo s PHP, vendar je na voljo v repozitoriju pecl.

Namestitev in konfiguracija

Za obravnavano distribucijo sem se odločil uporabiti Debian, ker se najpogosteje uporablja pri ustvarjanju spletnih strežnikov. Modul Memcached za PHP je na voljo v že prevedenem repozitoriju (php5-memcached), vendar bom postopek namestitve opisal iz izvorne kode, saj niso vsi repozitoriji tako bogati kot Debianov.

Namestitev strežnika Memcached

#apt-get install memcached
Za začetek vam bo zadostovala naslednja konfiguracija:
#/etc/memcached.conf
#Memcached bo deloval kot demon
-d
#Dnevnik bo dodan tam
dnevniška datoteka /var/log/
#Za shranjevanje bomo namenili 256 megabajtov RAM-a
-m 256
#Ta vrata bodo poslušala
-p 11211
#V prihodnosti je priporočljivo spremeniti
-ti nihče
#Poslušaj lokalnega gostitelja
-l 127.0.0.1

#/etc/init.d/memcached ponovni zagon
Preverjanje
# netstat -tap | grep memcached
tcp 0 0 lokalni gostitelj:11211 * :* POSLUŠAJ 13036 /

Prevedite in namestite modul za PHP

apt-get namestite php5-dev libmemcache-dev

Pecl prenesite memcache
tar xzvf memcache-2.2.6.tgz
cd memcache-2.2.6/
phpize && ./ configure --enable-memcache && make
cp moduli/ / usr/ lib/ php5/ 20060613 /

echo "extension=memcache.so" >> / etc/ php5/ apache2/ php.ini
/etc/init.d/apache2 znova zaženite


To je vse! Sploh ni težko.

Primeri uporabe

1. Osnovne operacije

  1. //Ustvari nov predmet. Lahko pišete tudi v proceduralnem slogu
  2. = novo;
  3. -> poveži ("127.0.0.1", 11211) ali umri ("Ni bilo mogoče vzpostaviti povezave");
  4. //Poskusite pridobiti objekt s ključem our_var
  5. $var_key = @ -> get ("our_var" ) ;
  6. if (! prazno ($var_key) )
  7. //Če je predmet predpomnjen, natisnite njegovo vrednost
  8. echo $var_key;
  9. drugače
  10. //Če v predpomnilniku ni predmeta s ključem our_var, ga ustvarite
  11. //Naš objekt_var bo shranjen 5 sekund in ne bo stisnjen
  12. -> nastavi ("our_var", datum ("G:i:s"), false, 5);
  13. //Izpis predpomnjenih podatkov
  14. echo -> get ("our_var" );
  15. ->zapri();

Kot rezultat izvajanja te kode bo vsakič prikazan čas, natančen na sekunde. Vendar se bo posodobil vsakih 5 sekund, dokler predpomnilnik ne bo počiščen. Ta primer ponazarja najpreprostejše operacije, vendar je bolj verjetno, da bomo izgubili na zmogljivosti kot pridobili. Navsezadnje se bomo morali vsakič povezati s strežnikom ...

2. Povečajte produktivnost

2.1 S predpomnjenjem
  1. < ? php
  2. funkcija LoadCPU()
  3. //Funkcija, ki naj naloži procesor
  4. $image = imagecreate(800, 600);
  5. //Bela barva ozadja
  6. $color = imagecolorallocate($image, 255, 255, 255) ;
  7. //Črna
  8. $color2 = imagecolorallocate($image, 0, 0, 0) ;
  9. za ($i = 0; $i< 10000 ; $i++ ) {
  10. imagesetpixel($image, rand (0, 800), rand (0,600), $color2);
  11. //Odvrzi kazalec
  12. vrni $image;
  13. //Ustvarite nov objekt Memcache
  14. = novo;
  15. //Povežite se z našim strežnikom
  16. -> poveži ("127.0.0.1", 11211) ali umri ("Ni bilo mogoče vzpostaviti povezave");
  17. //Poskusite pridobiti predmet s ključno sliko
  18. $image_bin = - > get("image" ) ;
  19. if (prazno($image_bin)) (
  20. //Če v predpomnilniku ni slike, jo ustvarite in predpomnite
  21. imagepng(Naloži CPU(),getcwd().."/tmp.png" ,9) ;
  22. $image_bin = file_get_contents(getcwd() ."/tmp.png" ) ;
  23. unlink(getcwd() ."/tmp.png" ) ;
  24. -> set("slika", $image_bin, false, 30) ;
  25. //Pridobi sliko iz predpomnilnika
  26. header("Content-type: image/png" ) ;
  27. echo $image_bin;
  28. //Zaprite povezavo s strežnikom Memcached
  29. -> zapri();
  30. ? >

Ta primer prikazuje funkcijo, ki ustvari sliko 800x600 in nanjo postavi 10.000 pik. Ko smo takšno sliko enkrat ustvarili, jo bomo v prihodnje samo prikazali na zaslonu, ne da bi jo znova ustvarili.
2.2 Brez predpomnjenja
  1. funkcija LoadCPU()
  2. //Funkcija, ki naj naloži procesor
  3. //Ustvarite sliko 800x600
  4. $image = imagecreate(800, 600);
  5. //Bela barva ozadja
  6. $color = imagecolorallocate($image, 255, 255, 255);
  7. //Črna
  8. $color2 = imagecolorallocate($image, 0, 0, 0);
  9. za ($i = 0; $i< 10000 ; $i ++ ) {
  10. //Razporedite 10.000 točk v naključnem vrstnem redu
  11. imagesetpixel($image, rand(0, 800), rand(0, 600), $color2);
  12. //Odvrzi kazalec
  13. vrni $image;
  14. //Prikaži sliko brez predpomnjenja
  15. header("Vrsta vsebine: slika/png");
  16. imagepng (Naloži CPU(), "", 9);

Tukaj je vse veliko preprostejše in bolj znano: vsakič znova ustvarimo sliko.
rezultate
Preizkusil sem delovanje obeh skriptov. Isti stroj je v prvem primeru proizvedel 460 odzivov na sekundo, v drugem pa le 10. Kar je bilo za pričakovati.

Še nekaj uporabnih funkcij

addServer - če imate na voljo več strežnikov za predpomnjenje, lahko ustvarite gručo tako, da dodate strežnike v bazen. Morate biti pozorni na parameter utež. Označuje, koliko pomnilnika boste imeli na voljo na določenem strežniku.
delete - iz imena je jasno, da ta metoda iz predpomnilnika izbriše predmet z danim ključem.
zamenjaj - zamenja vrednost predmeta z danim ključem. Uporabite ga, če morate spremeniti vsebino predmeta, preden poteče njegova življenjska doba.

Spodnja črta

Z mojega vidika bi se moralo predpomnjenje uporabljati le pri zelo obremenjenih virih. Navsezadnje vsakič, ko se povežete s strežnikom Memcached, izgubite dragoceni čas, ki najverjetneje ne bo upravičen. Kar zadeva velike projekte, je bolje napisati več vrstic kode naenkrat, kot pa to storiti na hitro, z mislijo, da vaša storitev laže. Prav tako ne pozabite na porabo pomnilnika! Upoštevajte, da ste s tem, ko ste v predpomnilnik vstavili 300 megabajtov, odvzeli 300 megabajtov RAM-a ...
Na koncu želim povedati, da ta članek ne razkriva vseh užitkov tehnologije, vendar upam, da vas bo spodbudil k samoizboljšanju. Hvala za branje, dragi %username%!

UPD:Še ena zanimiva točka. Memcached, obstaja PHP API za libmemcached. In Memcache, knjižnica za php, ki ne uporablja libmemcached.

Modul Memcache zagotavlja priročne proceduralne in objektno usmerjene vmesnike mehanizmu za predpomnjenje memcached. Memcache je zelo učinkovit demon za predpomnjenje, ki je bil posebej zasnovan za zmanjšanje obremenitve baze podatkov za visoko obremenjene, dinamične spletne aplikacije.

Modul Memcache nudi tudi upravljalnik seje. Več informacij o Memcached lahko najdete na memcached.org

Načeloma je opis namestitve in konfiguracije v ruščini že pripravljen in se lahko seznanite z njim.

Ne pozabite, da je v predpomnilnik mogoče shraniti vse vrste podatkov: spremenljivke, objekte in nize, PA NE SREDSTVA!

Če predmet vsebuje lastnost - vir, na primer povezavo z bazo podatkov, ali vsebuje drug objekt s podobnimi lastnostmi, je treba to situacijo obravnavati ločeno, na primer s preglasitvijo metode __sleep(), v kateri mora ta vir "ubiti" in metodo __wakeup (), v kateri je treba ta vir oživiti.

Pravzaprav lahko vse te metode razdelimo v 3 skupine:

  1. Delo z vrednotami
  2. Delo s strežniki in povezavami
  3. Prejemanje informacij

Delo z vrednotami

Metode v tej skupini vam omogočajo naslednje:

  • Nastavite vrednosti
  • Izbrišite te vrednosti
  • Zamenjajte te vrednosti
  • Do teh vrednosti dostopajte s ključem
  • Upravljajte življenjsko dobo vrednosti

Nekaj ​​posebnih metod za povečevanje in zmanjševanje celih vrednosti.

Memcache::set()
Memcache::add()

Omogoča nastavitev vrednosti, nastavitev stiskanja in življenjske dobe za to vrednost. Edina razlika v obnašanju teh metod je, da bo metoda Memcache::add vrnila FALSE, če je vrednost z istim ključem že nastavljena.

bool Memcache::add
bool Memcache::set(niz $key, mešani $var [, int $flag [, int $expire ]])

  • niz $key je ključ vrednosti, z njim operiramo vrednost.
  • mešana $var - vrednost.
  • konstante
povezava ("localhost", 11211, 30); $cache->add("myfirst", 1000, MEMCACHE_COMPRESSED, 15); $cache->set("mysecond", 2000, MEMCACHE_COMPRESSED, 15);

Memcache::get()

Vrne zahtevano vrednost ali FALSE, če je neuspešno ali če vrednost s tem ključem še ni bila nastavljena.

Posredujete lahko matriko vrednostnih ključev, nato pa bo Memcache::get prav tako vrnil matriko, ki bo vsebovala najdene pare ključ-vrednost.

Opozorila!

Če ime ključa vsebuje poševnico nazaj, potem rezultati dela bodo nepredvidljivi!

Tudi Memcached ima nekaj težav: po nekaterih poročilih naj bi (včasih) nagnjeni k napakam prekoračitve medpomnilnika, ki občasno povzroči prepisovanje [delnih] podatkov in zato onemogoči deserializacijo struktur, ne pozabite preveriti, ali Memcache::get vrne bool, dobule ali long kot rezultat pridobivanja matrike ali predmeta, potem je šlo nekaj narobe.

vrvica Memcache::get(niz $key [, int &$flags ])
niz Memcache::get(matrika $keys [, array &$flags ])

  • niz $key - ključ vrednosti ali niz ključev, katerih vrednosti je treba pridobiti.
  • int $flag - namen tega parametra mi ostaja uganka. Poskušal sem uporabiti nekaj celoštevilskih vrednosti, vendar ni imelo nobenega učinka. In primeri so večinoma podani brez uporabe, iz česar sem zaključil, da lahko delaš brez njega :)
povezava ("localhost", 11211, 30); $cache->add("myfirst", 1000, MEMCACHE_COMPRESSED, 15); $cache->set("mysecond", 2000, MEMCACHE_COMPRESSED, 15); print_r($cache->get(array("myfirst","mysecond")));

rezultat:

Niz (=> 1000 => 2000)

Memcache::delete()

Odstranite vrednost iz predpomnilnika.

komentar:

Ta metoda ne deluje vedno (odvisno od različice programske opreme)! Na koncu strani so primeri, ko Memcache::delete deluje in kdaj ne.

No, edina stabilna možnost je ponastavitev nepotrebnih vrednosti:

$cache->set("tri", NULL);

Obstaja samo en minus - ključ v tem primeru ne gre nikamor

vrvica Memcache::delete(niz $key [, int $timeout = 0])

  • niz $key - ključna vrednost, ki jo želite izbrisati.
  • int $timeout - tudi ta parameter je zastarel in ni podprt, privzeto je 0 sekund. Ne uporabljajte te možnosti.

Memcache::replace()

Prepiši obstoječo vrednost.

Za zamenjavo je treba uporabiti Memcache::replace(). obstoječa vrednost. Če vrednost s takim ključem ne obstaja, Memcache::replace() vrne FALSE. V nasprotnem primeru se Memcache::replace() obnaša enako kot Memcache::set(). Uporabite lahko tudi funkcijo memcache_replace().

vrvica Memcache::replace(niz $key, mešani $var [, int $flag [, int $expire ]])

  • niz $key - ključ, katerega vrednost je treba zamenjati.
  • mešani $var - nova vrednost.
  • int $flag - zastavica, ki označuje, ali naj se za shranjeno vrednost uporabi stiskanje (tu pride na vrsto Zlib), lahko se uporabljajo konstante
  • int $expire - Življenjska doba vrednosti (predpomnilnik). Če je enako nič, potem za nedoločen čas. Uporabite lahko tudi časovni žig ali število sekund od trenutnega časa, vendar takrat število sekund ne sme preseči 2592000 (30 dni).
povezava ("localhost", 11211, 30); $cache->add("eno", 111, 0, 15); $cache->add("dva", 222, 0, 15); $cache->add("tri", 333, 0, 15); $cache->replace("tri", 777); print_r($cache->get(array("one","two","three"))); Niz (=> 111 => 222 => 777)

Memcache::increment()

Poveča vrednost podanega ključa za podano vrednost. Če vrednost navedenega ključa ni številska in je ni mogoče pretvoriti v številko, bo spremenila svojo vrednost na vrednost, podano kot drugi parameter. Memcache::increment() ne ustvari elementa, če še ne obstaja.

Ni priporočljivo uporabljati Memcache::increment() z vrednostmi, ki so bile stisnjene (nastavljene z zastavico MEMCACHE_COMPRESSED), ker bo pozneje prišlo do presenečenj, ko boste poskušali pridobiti te vrednosti z uporabo Memcache::get()

Osebno sem preveril in nisem opazil nobenih napak :)

int Memcache::inkrement

  • niz $key - ključ, katerega vrednost je treba povečati.
  • int $value - poveča vrednost.
povezava ("localhost", 11211, 30); $cache->set("someOne", 10, 0, 5); $cache->increment("someOne", 10, 0, 5); $cache->increment("someOne", 10, 0, 5); echo $cache->get("someOne");// bo natisnil 30

Memcache::decrement()

Zmanjša vrednost podanega ključa za podano vrednost. Podobno kot Memcache::increment() se trenutna vrednost elementa pretvori v številsko vrednost in nato zmanjša

int Memcache::dekrement(niz $key [, int $value = 1 ])

  • niz $key - ključ, katerega vrednost je treba zmanjšati.
  • int $value - zmanjša vrednost.

Memcache::flush()

Memcache::flush() razveljavi vse obstoječe vrednosti. Memcache::flush() dejansko ne sprosti pomnilniških virov, le označi vse elemente kot zastarele, tako da bo zaseden pomnilnik na voljo za uporabo z novimi vrednostmi. Uporabite lahko tudi funkcijo memcache_flush().

bool Memcache::flush(prazno)

Spodnji primer ne bo izpisal ničesar.

povezava ("localhost", 11211, 30); $cache->set("someOne", 111, 0, 5); $cache->set("someTwo", 222, 0, 5); $cache->set("someTree", 333, 0, 5); $cache->flush(); //Počisti predpomnilnik print_r($cache->get(array("someOne","someTwo","someTree")));

Delo s strežniki in povezavami.

Memcache lahko deluje z enim samim strežnikom ali skupino (nizom) strežnikov.

Če uporabljate samo en strežnik za strežbo predpomnilnika, boste morali za inicializacijo dela ustvariti le objekt predpomnilnika in uporabiti metodo Memcache::connect

Če boste ustvarili skupino strežnikov, boste morali najprej ustvariti objekt predpomnilnika in nato uporabiti Memcache::addServer dodajte zahtevano število strežnikov.

Memcache::connect()

Vzpostavi povezavo s strežnikom Memcached. Povezava, ki je bila odprta z uporabo Memcache::connect(), bo samodejno zaprta, ko se skript zaključi, vendar jo lahko izrecno zaprete z uporabo Memcache::close(). Uporabite lahko tudi funkcijo memcache_connect(). Vrne TRUE v primeru uspeha ali FALSE v primeru napake.

bool Memcache::connect

povezava ("localhost", 11211, 30);

Memcache::pconnect()

Ta metoda je podobna Memcache::connect() z edino razliko, da vzpostavi trajno povezavo. Ta povezava se ne prekine, ko se skript zaključi in se pokliče Memcache::close(). Uporabite lahko tudi funkcijo memcache_pconnect(). Vrne objekt Memcache v primeru uspeha ali FALSE v primeru napake.

mešano Memcache::pconnect(niz $host [, int $port [, int $timeout ]])

  • Ta parameter lahko poda tudi druge transporte, kot je unix:///path/to/memcached.sock, tj. uporabite vtičnice UNIX, v tem primeru morajo biti vrata nastavljena na 0.
  • Ta parameter nastavite na 0, če nameravate uporabljati vtičnice.
  • int $timeout - omejitev v sekundah za povezovanje z demonom. Dvakrat premislite, preden spremenite privzeto vrednost 1 sekunde - lahko izgubite vse prednosti predpomnjenja, če vaša povezava traja predolgo.
pconnect("lokalni gostitelj", 11211, 30);

Memcache::close()

Zapre povezavo s strežnikom Memcached. Ta funkcija ne zapre trajnih povezav, ki se zaprejo le, ko se spletni strežnik zaustavi/ponovno zažene. Uporabite lahko tudi funkcijo memcache_close().

bool Memcache::close(prazno)

Memcache::addServer()

Doda strežnik v področje povezav. Povezava, ki je bila odprta z uporabo Memcache::addServer(), bo samodejno zaprta, ko se skript zaključi, ali pa jo lahko zaprete ročno z Memcache::close(). Uporabite lahko funkcijo memcache_add_server().

Pri uporabi Memcache::addServer (v nasprotju z Memcache::connect() in Memcache::PConnect()) se omrežna povezava ne vzpostavi, dokler ni dejansko potrebna. Na ta način ni dodatnih stroškov pri dodajanju velikega števila strežnikov v skupino, tudi če sploh niso potrebni.

Nabor strežnikov zagotavlja večjo toleranco za napake. Vse napake vtičnic ali napake Memcached na ravni strežnika (razen napak pomnilnika) povzročijo ponovno dodelitev virov. Napake odjemalca, kot je dodajanje obstoječega ključa, ne bodo povzročile napak.

komentar:

Vrne TRUE ob uspehu ali FALSE ob napaki.

bool Memcache::addServer(niz $host [, int $port = 11211 [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, callable $failure_callback [, int $timeoutms ]]]] ]]]])

  • string $host - gostitelj v predpomnilniku. Ta parameter lahko poda tudi druge transporte, kot je unix:///path/to/memcached.sock, tj. uporabite vtičnice UNIX, v tem primeru morajo biti vrata nastavljena na 0.
  • int $port - vrata, na katerih Memcached posluša povezave. Ta parameter nastavite na 0, če nameravate uporabljati vtičnice.
  • bool $persistent - Nastavi uporabo obstojne povezave. Privzeto je TRUE.
  • int $weight – večja kot je vrednost, večja je verjetnost, da bo ta strežnik izbran za shranjevanje vrednosti. Tisti. to je nekakšna “teža” strežnika v splošnem bazenu, posredno je to tudi pričakovana obremenitev strežnika.
  • int $timeout - omejitev v sekundah za povezovanje z demonom. Dvakrat premislite, preden spremenite privzeto vrednost 1 sekunde - lahko izgubite vse prednosti predpomnjenja, če vaša povezava traja predolgo.
  • niz $timeoutms - ni opisano.

Prejemanje informacij

Memcache::getExtendedStats()

Vrne dvodimenzionalno, asociativno matriko statističnih podatkov strežnika. Niz ključev gostitelj:vrata strežnika. Vrednosti vsebujejo posamezne statistične parametre. Neuspeli strežniki bodo imeli vrednost FALSE. Uporabite lahko tudi funkcijo memcache_get_extended_stats().

komentar:

Ta funkcija je bila dodana v Memcache v različici 2.0.0

niz Memcache::getExtendedStats([ niz $type [, int $slabid [, int $limit = 100 ]]])

In zdaj en vic:

Vrsta statistike "cachedump" je bila iz varnostnih razlogov odstranjena iz Memcached

Primer izpisa informacij (klic brez parametrov):

Niz ( => 5179 => 966862 => 1336505233 => 1.4.5 => 64 => 160.302880 => 483.975109 => 6 => 358080 => 13 => 15037476 => 3501979 => 46 => 11507898 => 3529578 => 0 => 0 => 0 => 76 => 0 => 0 => 0 => 0 => 0 => 0 => 0 => 1643906080 => 11298732744 => 67108864 => 1 => 0 => 4 => 0 => 3295454 => 7623 => 3501915 => 0 => 1825755) ...)

Memcache::getServerStatus()

Vrne stanje povezave/brez povezave strežnika. Uporabite lahko tudi funkcijo memcache_get_server_status()

komentar:

Ta funkcija je bila dodana v Memcache v različici 2.0.0

int Memcache::getServerStatus(niz $gostitelj [, int $port = 11211 ])

  • string $host - gostitelj v predpomnilniku.
  • int $port - vrata, na katerih Memcached posluša povezave.

Memcache::getStats()

Vrne asociativno polje s statistiko strežnika. Niz ključev, ki ustreza statističnim parametrom in vrednostim za vrednost parametra. Uporabite lahko tudi funkcijo memcache_get_stats()

niz Memcache::getStats s ([ string $type [, int $slabid [, int $limit = 100 ]]])

  • string $type - Vrsta statistike. Veljavne vrednosti: (reset, malloc, maps, cachedump, slabs, items, sizes). V skladu s specifikacijo protokola Memcached se ti dodatni argumenti "lahko spremenijo za udobje razvijalcev."
  • int $slabid – Uporablja se, ko je prvi parameter nastavljen na "cachedump" in določa strežnik, ki bo uporabljen za odpravljanje napak.
  • int $limit – Uporablja se, ko je prvi parameter nastavljen na "cachedump", da se omeji število vnosov v izpisu.

Memcache::getVersion()

Vrne niz – številko različice strežnika. Uporabite lahko tudi funkcijo memcache_get_version().

vrvica Memcache::getVersion(prazno)

Memcache::setCompressThreshold()

Omogoča samodejno stiskanje velikih vrednosti. Uporabite lahko tudi funkcijo memcache_set_compress_threshold()

komentar:

Ta funkcija je bila dodana v Memcache v različici 2.0.0

bool Memcache::setCompressThreshold(int $threshold [, float $min_savings ])

  • int $threshold - Najmanjša dolžina vrednosti, ki jo je treba samodejno stisniti.
  • float $min_savings - Nastavi kompresijsko razmerje. Podana vrednost mora biti med 0 in 1. Privzeta vrednost je 0,2, kar daje najmanj 20 % prihranka pri stiskanju.

Memcache::setServerParams()

Spremeni parametre strežnika med izvajanjem. Uporabite lahko tudi funkcijo memcache_set_server_params().

Vrne TRUE ob uspehu ali FALSE ob napaki.

komentar:

Ta funkcija je bila dodana v Memcache v različici 2.0.0

bool Memcache::setServerParams(niz $host [, int $port = 11211 [, int $timeout [, int $retry_interval = false [, bool $status [, klicno $failure_callback ]]]]])

  • string $host - gostitelj v predpomnilniku.
  • int $port - vrata, na katerih Memcached posluša povezave.
  • int $timeout - omejitev v sekundah za povezovanje z demonom. Dvakrat premislite, preden spremenite privzeto vrednost 1 sekunde - lahko izgubite vse prednosti predpomnjenja, če vaša povezava traja predolgo.
  • int $retry_interval - Nastavi, kako pogosto bo neuspešen strežnik vprašan, privzeta vrednost je 15 sekund. Nastavitev tega parametra na -1 onemogoči samodejni ponovni poskus zahtev.
  • bool $status - Označi strežnik kot ONLINE. Nastavitev tega parametra na FALSE in retry_interval -1 omogoča, da neuspeli strežnik ostane v skupini aktivnih strežnikov, da ne vpliva na algoritme za dodeljevanje ključev. Zahteve za ta strežnik bodo razdeljene med preostale razpoložljive strežnike. Privzeta vrednost je TRUE, kar pomeni, da je treba strežnik obravnavati kot ONLINE.
  • callable $failure_callback - Omogoča uporabniku, da določi funkcijo povratnega klica, ki naj se zažene, ko je zaznana napaka. Funkcija mora prevzeti dva parametra, ime gostitelja in vrata neuspelega strežnika.

S to objavo želim odpreti majhno serijo objav, ki temeljijo na materialih poročila na HighLoad++-2008. Pozneje bo celotno besedilo objavljeno kot en velik PDF.

Uvod

Najprej o naslovu serije objav: objave bodo o predpomnjenju v spletu (v visoko obremenjenih spletnih projektih) in o uporabi memcached za predpomnjenje ter o drugih uporabah memcached v spletnih projektih. To pomeni, da bodo v tej seriji objav zajete vse tri komponente imena v različnih kombinacijah.

Danes je predpomnjenje sestavni del katerega koli spletnega projekta, ne nujno visokoobremenjenega. Za vsak vir je kritična lastnost za uporabnika odzivni čas strežnika. Podaljšanje odzivnega časa strežnika povzroči odliv obiskovalcev. Zato je treba zmanjšati odzivni čas: za to je treba skrajšati čas, potreben za generiranje odgovora uporabniku, odgovor uporabniku pa zahteva prejem podatkov iz nekaterih zunanjih virov (backend). Ti viri so lahko baze podatkov ali kateri koli drug relativno počasen vir podatkov (na primer oddaljeni datotečni strežnik, na katerem preverjamo količino prostega prostora). Za ustvarjanje ene strani dokaj zapletenega vira bomo morda morali opraviti na desetine podobnih klicev. Mnogi od njih bodo hitri: 20 ms ali manj, vendar vedno obstaja nekaj majhnega števila poizvedb, katerih računski čas je mogoče izračunati v sekundah ali minutah (tudi v najbolj optimiziranem sistemu je lahko ena, čeprav mora biti njihovo število minimalno) . Če seštejemo ves čas, ki ga porabimo za čakanje na rezultate poizvedbe (če poizvedbe izvajamo vzporedno, bomo vzeli računski čas najdaljše poizvedbe), dobimo nezadovoljiv odzivni čas.

Rešitev tega problema je predpomnjenje: rezultat izračunov postavimo v neko shrambo (na primer memcached), ki ima odlične lastnosti glede dostopnega časa do informacij. Zdaj, namesto da bi klicali počasna, zapletena in težka ozadja, moramo samo poslati zahtevo hitremu predpomnilniku.

Memcached in predpomnjenje

Lokalnostno načelo

Predpomnilnike ali pristop predpomnilnika vidimo povsod v elektronskih napravah in arhitekturi programske opreme: predpomnilnik procesorja (prva in druga raven), medpomnilniki trdega diska, predpomnilnik operacijskega sistema, medpomnilnik v avtoradiu. Kaj določa tako uspešnost predpomnjenja? Odgovor je v načelu lokalnosti: program ali naprava teži k delu z določeno podmnožico podatkov iz splošnega niza v določenem časovnem obdobju. V primeru RAM-a to pomeni, da če program deluje s podatki, ki se nahajajo na naslovu 100, potem bo z večjo stopnjo verjetnosti naslednji dostop na naslovu 101, 102 itd., In ne na naslovu 10000, na primer. Enako je s trdim diskom: njegov medpomnilnik je napolnjen s podatki iz območij, ki mejijo na zadnje prebrane sektorje, če naši programi v nekem trenutku niso delali z nekim razmeroma majhnim naborom datotek, ampak s celotno vsebino trdega diska. , medpomnilniki bi bili brez pomena. Avtomobilski stereo medpomnilnik bere pred naslednjimi minutami glasbe z diska, ker je večja verjetnost, da bomo glasbeno datoteko poslušali zaporedno, kot pa skakali po naboru glasbe itd.

V primeru spletnih projektov je uspeh predpomnjenja določen z dejstvom, da ima spletno mesto vedno najbolj priljubljene strani, nekateri podatki so uporabljeni na vseh ali skoraj vseh straneh, kar pomeni, da obstajajo nekateri izbori, ki se zahtevajo veliko pogosteje. kot drugi. Več klicev v ozadju zamenjamo z enim klicem za izgradnjo predpomnilnika, nato pa bodo vsi nadaljnji klici opravljeni prek hitro delujočega predpomnilnika.

Predpomnilnik je vedno boljši od prvotnega vira podatkov: predpomnilnik procesorja je veliko hitrejši od RAM-a, vendar RAM-a ne moremo narediti tako hitrega kot predpomnilnik – je stroškovno neučinkovit in tehnično težaven. Medpomnilnik trdega diska zadosti zahtevam po podatkovnem redu velikosti hitreje kot sam trdi disk, vendar medpomnilnik nima možnosti zapomniti podatkov, ko je napajanje izklopljeno - v tem smislu je slabši od same naprave. Podobno je s predpomnjenjem na spletu: predpomnilnik je hitrejši in učinkovitejši od zaledja, vendar običajno v primeru ponovnega zagona ali zrušitve strežnika ne more shraniti podatkov in tudi nima logike za izračun rezultatov: vrne lahko samo tisto, kar smo prej vložili vanj.

Memcached

Memcached je ogromna zgoščena tabela v pomnilniku, do katere lahko dostopate prek omrežnega protokola. Zagotavlja storitev za shranjevanje vrednosti, povezanih s ključi. Do hash-a dostopamo preko preprostega omrežnega protokola, odjemalec je lahko program, napisan v poljubnem programskem jeziku (obstajajo odjemalci za C/C++, PHP, Perl, Java itd.).

Najenostavnejše operacije so pridobivanje vrednosti podanega ključa (get), nastavitev vrednosti ključa (set) in brisanje ključa (del). Za izvedbo verige atomskih operacij (ob upoštevanju hkratnega dostopa do memcached s strani vzporednih procesov) se uporabljajo dodatne operacije: povečanje/zmanjšanje vrednosti ključa (incr/decr), dodajanje podatkov vrednosti ključa na začetek ali konec (priloži /prepend), atomsko povezovanje pridobivanje/nastavljanje vrednosti (gets/cas) in drugi.

Memcached je implementiral Brad Fitzpatrick kot del svojega dela na projektu LiveJournal. Uporabljen je bil za razbremenitev baze podatkov pred zahtevami pri streženju vsebine strani. Danes je memcached našel svojo uporabo v jedru številnih velikih projektov, na primer Wikipedia, YouTube, Facebook in drugi.

Na splošno je shema predpomnjenja videti takole: frontend (del projekta, ki generira odziv uporabniku) mora prejeti podatke iz nekega vzorca. Frontend vzpostavi stik s kot gepard hitrim memcached strežnikom za predpomnilnik pridobivanja (pridobi zahtevo). Če najdemo ustrezen ključ, se delo konča. V nasprotnem primeru se raje obrnite na težko, okorno, a zmogljivo (kot slon) zaledje, ki je največkrat baza podatkov. Dobljeni rezultat se takoj zapiše v predpomnilnik memcached kot predpomnilnik (nastavi zahtevo). V tem primeru je ključu običajno dodeljena najdaljša življenjska doba (datum poteka), ki ustreza trenutku ponastavitve predpomnilnika.

Ta standardna shema predpomnjenja je vedno implementirana. Namesto memcached lahko nekateri projekti uporabljajo lokalne datoteke ali druge metode shranjevanja (druga baza podatkov, predpomnilnik PHP pospeševalnika itd.), vendar, kot bo prikazano spodaj, ta shema morda ne bo delovala najbolj učinkovito . Kljub temu se bomo v naši nadaljnji zgodbi zanašali na to shemo.

memcached arhitektura

Kako deluje memcached? Kako mu uspe delovati tako hitro, da tudi več deset zahtev za memcached, potrebnih za obdelavo ene strani spletnega mesta, ne povzroči znatne zamude. Hkrati je memcached izjemno nezahteven glede računalniških virov: pri naloženi namestitvi procesorski čas, ki ga uporablja, le redko preseže 10 %.

Prvič, memcached je zasnovan tako, da imajo vse njegove operacije algoritemsko kompleksnost O(1), tj. čas izvajanja katere koli operacije ni odvisen od števila ključev, ki jih memcached shrani. To pomeni, da nekatere operacije (ali zmožnosti) manjkajo, če njihova izvedba zahteva le linearni (O(n)) čas. Tako memcached nima možnosti združevanja ključev »v mape«, tj. kakršno koli združevanje ključev in ne bomo našli skupinskih operacij na ključih ali njihovih vrednostih.

Glavne optimizirane operacije so dodeljevanje/sprostitev pomnilniških blokov za shranjevanje ključev, definiranje politike najmanj uporabljenih ključev (LRU) za brisanje predpomnilnika, ko ni dovolj pomnilnika. Iskanje ključev poteka prek zgoščevanja, zato ima kompleksnost O(1).

Uporablja asinhroni V/I in ne uporablja niti, kar zagotavlja dodatno izboljšanje zmogljivosti in nižje zahteve po virih. Pravzaprav memcached lahko uporablja niti, vendar je to potrebno samo za uporabo vseh jeder ali procesorjev, ki so na voljo na strežniku v primeru prevelike obremenitve - v nobenem primeru se nit ne ustvari za vsako povezavo.

Pravzaprav lahko rečemo, da je odzivni čas strežnika memcached določen samo z omrežnimi stroški in je skoraj enak času, ki je potreben za prenos paketa od frontenda do strežnika memcached (RTT). Takšne značilnosti omogočajo uporabo memcached v zelo obremenjenih spletnih projektih za reševanje različnih težav, vključno s predpomnjenjem podatkov.

Izgubljeni ključi

Memcached ni zanesljiva shramba; možno je, da bo ključ odstranjen iz predpomnilnika, preden poteče njegova življenjska doba. Arhitektura projekta mora biti pripravljena na takšno situacijo in se mora fleksibilno odzvati na izgubo ključev. Obstajajo trije glavni razlogi za izgubo ključev:
  1. Ključ je bil izbrisan pred datumom poteka zaradi premalo pomnilnika za shranjevanje vrednosti drugih ključev. Memcached uporablja pravilnik LRU, zato ta izguba pomeni, da je bil ključ redko uporabljen, predpomnilnik pa se sprosti za shranjevanje bolj priljubljenih ključev.
  2. Ključ je bil izbrisan, ker je njegova življenjska doba potekla. Ta situacija, strogo gledano, ni izguba, saj smo sami omejili življenjsko dobo ključa, toda za kodo odjemalca v zvezi z memcached se takšna izguba ne razlikuje od drugih primerov - pri dostopu do memcached prejmemo odgovor »tam ni takega ključa."
  3. Najbolj neprijetna situacija je zrušitev procesa memcached ali strežnika, na katerem se nahaja. V tej situaciji izgubimo vse ključe, ki so bili shranjeni v predpomnilniku. Organizacija grozda vam omogoča, da nekoliko zgladite posledice: veliko memcached strežnikov, po katerih so projektni ključi "razpršeni": na ta način bodo posledice propada enega predpomnilnika manj opazne.

Vse opisane situacije je treba upoštevati pri razvoju programske opreme, ki deluje z memcached. Podatke, ki jih hranimo v memcached, lahko razdelimo glede na resnost njihove izgube.

"Lahko bi ga izgubili". Ta kategorija vključuje predpomnilnike izbir baze podatkov. Izguba takšnih ključev ni tako slaba, saj lahko preprosto obnovimo njihove vrednosti s ponovnim dostopom do zaledja. Vendar pogoste izgube predpomnilnika povzročijo nepotrebne klice baze podatkov.

"Ne bi rad izgubil". Tukaj lahko omenite števce obiskovalcev spletnega mesta, oglede virov itd. Čeprav je včasih nemogoče neposredno obnoviti te vrednosti, imajo vrednosti teh ključev časovno omejen pomen: po nekaj minutah njihova vrednost ni več pomembna in izračunana bo nova vrednost.

"Sploh ne bi smeli izgubiti". Memcached je priročen za shranjevanje uporabniških sej – vse seje so enako dostopne z vseh strežnikov, vključenih v čelni grozd. Torej, nikoli ne bi želel izgubiti vsebine sej - drugače bodo uporabniki na spletnem mestu "odjavljeni". Kako se poskušati izogniti? Ključe seje lahko podvojite na več memcached strežnikih iz gruče, tako da je verjetnost izgube zmanjšana.

Vsak bolj ali manj razvijajoči se spletni projekt prej ali slej naleti na težave, ki jih je najbolje rešiti s predpomnjenjem. Na primer shranjevanje agregiranih podatkov v neko shrambo, katerega izračun in/ali iskanje zahteva veliko časa. Obstaja več možnosti za predpomnjenje podatkov: shranjevanje podatkov na disk ali v RAM. Vsaka možnost ima svoje prednosti in slabosti. Shranjevanje na disk je počasno, snemanje poteka zaporedno z uporabo ključavnic, katerih število je običajno omejeno z operacijskim sistemom. Toda podatki so shranjeni za vedno in bodo na voljo po ponovnem zagonu strežnika. Nasprotno, RAM je hiter, brez zaklepanja, vendar se ne shrani v primeru ponovnega zagona. Vanj je nevarno shranjevati nepodvojene podatke. Če je s shranjevanjem na disk vse jasno in preprosto, potem je delo s pomnilnikom bolj zapleteno. Obstajajo aplikacije, ki prevzamejo to nalogo. Eden od njih je Memcached. V tem članku bomo govorili o tem.

Memcached je odprtokodni strežnik, ki omogoča predpomnilnik podatkov v RAM. Ima visoko hitrost. Priljubljeno. Ima velik nabor odjemalskih knjižnic, napisanih v različnih programskih jezikih.

V Php obstajata dve različici knjižnic: php-memcache in php-memcached. Prvi je star in ni več razvit. Drugi je nov in ima večji nabor funkcij. Med njimi je več razlik in na vas je, da se odločite, katero boste uporabili. Ta članek bo uporabljal php-memcached.

Da bi memcached bolje spoznali, ustvarimo majhno aplikacijo, ki izkorišča njegove osnovne zmogljivosti. Med avtorizacijo bomo zapisali zaščito pred ugibanjem gesla. Bistvo aplikacije bo v tem, da v primeru neuspešnih poskusov avtorizacije aplikacija število neuspešnih poskusov shrani v predpomnilnik. Ko to število preseže nastavljeni minimum, bo možnost avtorizacije za določen čas blokirana. Za 2-3 minute. V tem primeru močno zmanjšamo učinkovitost ugibanja gesel.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 zahtevaj_enkrat __DIR__. "/func.php" ; if (! extension_loaded ("memcached") ) ( die ( "Razširitev Memcached ni nameščena") ; ) $USE_CACHE_PROTECTION = res; $AUTH_MAX_ATTEMPTS = 5 ; $AUTH_LOGIN = "demo" ; $AUTH_PASSWORD = "demo" ; $napaka = polje (); if (IS_POST() ) ( $login = _POST("uporabniško ime" ) ; $password = _POST("geslo" ) ; if (! $login ) ( $error [ "username" ] = "required" ; ) if (! $password ) ( $error [ "password" ] = "required" ; ) // INIT MEMCACHE if ($USE_CACHE_PROTECTION ) ( $cache = new Memcached() ; $cache -> addServer ( "127.0.0.1" , 11211 ) ); $cacheKey = "prefix::login-protect-" $login ; //preveri zaščito predpomnilnika, če ($USE_CACHE_PROTECTION && ! $error) ($attempts = $cache -> get ($cacheKey) ; // PREVERI NEUSPEŠNE POSKUSE, če ($attempts >= $AUTH_MAX_ATTEMPTS ) ( $error [ "global" ] = "max_attempts" ; ) ) //preveri auth if (! $error ) ( //TODO: uporabi db bro if ($login == $AUTH_LOGIN && $password == $AUTH_PASSWORD ) ( // IZBRIŠI PODATKE OB USPEŠNEM AVTORISTICI if ($USE_CACHE_PROTECTION ) ( $cache -> delete ($cacheKey) ; ) stopAndRedirect("success.php" ) ; ) if ($USE_CACHE_PROTECTION ) ( / / POSKUS POVEČEVANJA if (! $cache -> increment ($cacheKey) ) ( $cache -> set ($cacheKey, 1, 60)); ) ) $error [ "global" ] = "auth_faild" ; ) )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Predstavitev uporabe memcached v php

Pooblastilo


Kot lahko vidite iz kode, je vse izjemno preprosto. Ustvari se edinstven ključ, ki ga sestavljajo predpona spletnega mesta, ime naloge in vnesena prijava. Naprej beremo, povečamo števec, izbrišemo. Vredno je biti pozoren na del kode, kjer skript poveča števec neuspelih poskusov avtorizacije. Vrne se metoda povečanja lažnoče v memcached ni vnosa. Zato v primeru okvare nastavimo vnos z vrednostjo 1 za točno 60 sekund.

Vredno se je osredotočiti na dejstvo, da uporabljamo metodo povečanja in ne set(getted_value+1) . Dejstvo je, da nastavljena metoda ne omogoča pravilnega povečanja števca, saj se lahko podatki spreminjajo med intervali branja in pisanja. Na primer, istočasno bo drug uporabnik prav tako uganil geslo. Zagotovljeno je, da metoda povečanja pravilno poveča števec!

Kot rezultat uporabe informacij, podanih v tem članku, boste lahko namestili in konfigurirali strežnik Memcached in potrebno razširitev php za interakcijo z njim, kot tudi storitev za analizo in statistiko phpMemcachedAdmin

Namestitev bo potekala pod Debianom z zalednim strežnikom. Če imate delujoč sveženj + php5-fpm, preprosto zamenjajte apache2 z php5-fpm v ukazih
Delovna orodja: upravitelj datotek za povezovanje programske opreme z vgrajenim urejevalnikom ali kitom.

Zdaj pa recimo, da na tem gostovanju že imamo spletno stran http://example.com

Najprej morate ugotoviti, kako je PHP konfiguriran (kaj pa, če je Memcached že nameščen?)). Da bi to naredili, bomo v korenu spletnega mesta začasno ustvarili datoteko info.php s kodo

Zdaj pa poglejmo http://example.com/info.php

Če vidimo, da obstaja podoben vnos, potem je vse v redu, zahtevana razširitev php je nameščena.
Če ne, potem morate delati.

Kako namestiti strežnik Memcached

Pred namestitvijo morate posodobiti repozitorij

Apt-get posodobitev && apt-get nadgradnja

Zdaj pa namestimo memcached in modul php zanj

Apt-get namestite memcached php5-memcache

Namestitev v teku. Po njegovem zaključku preverimo, kaj se je zgodilo

Kot rezultat bomo videli nekaj podobnega

Tcp 0 0 *:11211 *:* POSLUŠAJ 13053/memcached

Zdaj morate znova zagnati Apache ali php-fpm

Ponovni zagon storitve apache2

Nastavitev Memcached

Zdaj, ko je strežnik nameščen, ga je treba konfigurirati. Ni težko in ne bo vzelo veliko časa

Zapiranje Memcached z zunanjim dostopom

Kot lahko vidite, memcached privzeto visi na vratih 11211. Ker memcached nima vgrajenih mehanizmov za preverjanje pristnosti, se izkaže, da se lahko kdorkoli poveže od zunaj in ga uporablja za svoje namene. Da bi se temu izognili, lahko zaprete vrata 11211 s požarnim zidom ali konfigurirate predpomnjeni strežnik tako, da ga je mogoče uporabljati samo z lokalnega gostitelja. Zadnja metoda je opisana spodaj.

  1. Dodajte vrstico -l 127.0.0.1
  2. Znova zaženi memcached

    Ponovni zagon storitve memcached

    /etc/init.d/memcached ponovni zagon

In še enkrat preverimo

Netstat -tap | grep memcached

Na koncu bi morali videti nekaj takega

Tcp 0 0 localhost.localdo:11211 *:* POSLUŠAJ 13092/memcached

Prav tako po vseh spremembah ne pozabite znova zagnati Apache

Ponovni zagon storitve apache2

Povečanje količine delovnega pomnilnika Memcached

Memcached je privzeto dodeljen za uporabo 64 megabajtov RAM-a. Povečal bom na 1024, izhajate iz parametrov strežnika

  1. Odprite konfiguracijsko datoteko vi /etc/memcached.conf
  2. Poiščite vrednost -m 64
  3. Spremenite ga v -m 1024
  4. Znova zaženi storitev memcached znova zaženi memcached

Shranjevanje PHP sej v Memcached

Če več različnih spletnih mest uporablja isti strežnik ali gručo Memcached, lahko prestrežejo seje drug drugega in pridobijo dostop do svojih uporabniških računov, kar predstavlja potencialno nevarnost

PHP lahko pospešite tako, da pomnilnik seje premaknete s trdega diska na RAM s pomočjo memcached

Vedeti morate, katero razširitev php uporabljate, memcache ali memcached. , in lahko ugotovite, kaj imate z uporabo phpinfo(), v nastavitvah so podrobnosti, bodite previdni

Metoda za razširitev memcache

  1. Odprite /etc/php5/mods-available/memcache.ini
  2. Dodajte session.save_handler = memcache session.save_path = "tcp://127.0.0.1:11211"

Metoda za razširitev memcacheD

  1. Odprite /etc/php5/mods-available/memcached.ini
  2. Dodaj session.save_handler = memcached session.save_path = "127.0.0.1:11211"
  3. Znova zaženite storitev apache apache2 restart

Preverjanje phpinfo

Zdaj moramo preveriti, kaj imamo na izhodu. Če želite to narediti, odprite stran s phpinfo() in poiščite kodo za session.save_path v stolpcu z lokalnimi vrednostmi. Vrednost mora biti tcp://127.0.0.1:11211 ali 127.0.0.1:11211 ..conf) in iščemo
php_admin_value session.save_path

Mimogrede, lahko uporabite tudi direktivo php_value, da ne konfigurirate celotnega strežnika globalno, ampak samo določena spletna mesta. Če želite to narediti, lahko uredite .htaccess v korenu svojega spletnega mesta

Php_value session.save_handler "memcache" php_value session.save_path "tcp://127.0.0.1:11211"

Pripravljena delujoča konfiguracijska datoteka Memcached

Prav tako lahko vse prilagodite svojim potrebam, konfiguracijska datoteka vsebuje podrobne komentarje:

# memcached privzeta konfiguracijska datoteka # 2003 - Jay Bonci< ># To konfiguracijsko datoteko bere skript start-memcached, ki je # del distribucije Debian GNU/Linux. # Zaženi memcached kot demon. Ta ukaz je impliciten in ni potreben za delovanje demona #. Za več # informacij glejte README.Debian, ki je priložen temu paketu. -d # Zabeležite izhod memcached v /var/log/memcached logfile /var/log/memcached.log # Bodite podrobni # -v # Bodite še bolj podrobni (tudi ukazi odjemalca za tiskanje) # -vv # Začnite s kapo 64 megabajtov pomnilnika. To je razumno in privzeti demon # Upoštevajte, da bo demon zrasel do te velikosti, vendar ne bo imel na začetku toliko # pomnilnika # Količina pomnilnika v megabajtih, ki je dodeljena za predpomnjenje. Privzeto 64 megabajtov. #-m 64 -m 1024 # Vrata, na katerih bo Memcached visel, privzeto 11211 -p 11211 # Zaženi demon kot root. Start-memcached se bo privzeto izvajal kot root, če v tej konfiguracijski datoteki ni ukaza # -u -u memcache # Določite, kateri naslov IP naj posluša. Privzeto je poslušanje na vseh naslovih IP # Ta parameter je eden od edinih varnostnih ukrepov, ki jih ima memcached, zato se prepričajte #, da posluša vmesnik s požarnim zidom. -l 127.0.0.1 # Omejite število sočasnih dohodnih povezav. Privzeta nastavitev demona je 1024 # # -c 1024 # Zakleni ves stranski pomnilnik, preden to storiš, se posvetuj z README in domačo stranjo # -k # Vrni napako, ko je pomnilnik izčrpan (namesto odstranjevanja elementov) # -M # Povečaj osnovno datoteko. omejitev # -r

Namestitev razširitve memcache

Spodaj so ukazi po korakih, ki vam bodo pomagali ročno namestiti razširitev memcache PHP iz konzole

Apt-get namestitev php5-dev libmemcache-dev pecl prenos memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6/ phpize && ./configure --enable-memcache && make cp modules/memcache.so /usr/ lib/php5/20060613/ echo "razširitev=memcache.so" >> /etc/php5/apache2/php.ini

Znova zaženite Apache, da bodo spremembe začele veljati.

Ponovni zagon storitve apache2

Kako preveriti, ali Memcached deluje

Ustvarimo datoteko memcachetest.php v korenu spletnega mesta in vanjo napišimo naslednjo kodo

connect("localhost", 11211) ali exit("Ni mogoče vzpostaviti povezave s strežnikom Memcached"); $version = $memcache->getVersion(); echo "Različica strežnika: ".$različica."
\n"; $tmp_object = nov stdClass; $tmp_object->str_attr = "test"; $tmp_object->int_attr = 123; $memcache->set("ključ", $tmp_object, false, 10) ali umre ("Ne Uspelo mi je pustiti vnos v Memcached"); echo "Podatke zapisujemo v predpomnilnik Memcached (podatki bodo shranjeni 10 sekund)
\n"; $get_result = $memcache->get("ključ"); echo "Podatki, zapisani v Memcached:
\n"; var_dump($get_result); ?>

Zdaj ostane le še, da preverite rezultate: http://example.com/memcachetest.php
Če ste vse naredili pravilno, boste videli nekaj takega

phpMemcachedAdmin - spremljanje, statistika in upravljanje Memcached

phpMemcachedAdmin je programska oprema, ki nudi spletni vmesnik za spremljanje in upravljanje storitve Memcached v sistemu Linux. Omogoča vam ogled statistike v realnem času za vse operacije, ki jih podpira strežnik: pridobivanje, nastavitev, brisanje, povečanje, zmanjšanje, povrnjeno, izselitve, cas, kot tudi statistiko strežnika: omrežje, položaji, delovna različica, skupaj z grafikoni in notranjimi konfiguracijo strežnika.

Namestitev in konfiguracija phpMemcachedAdmin

Tukaj lahko greste na več načinov: dodelite ločeno domeno ali poddomeno za delovanje te storitve. Lahko pa ustvarite podimenik na delovnem mestu in vanj vnesete geslo ali . Zadnjo metodo nastavitve gesla za mapo bom opisal kot enostavnejšo.

Torej, recimo, da imamo spletno mesto https://site

Cd /var/www/site

Ustvarite imenik in pojdite nanj

Mkdir phpMemcachedAdmin && cd phpMemcachedAdmin

Prenesite najnovejšo različico distribucije

Wget http://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.tar.gz

Razpakirajte in izbrišite distribucijski arhiv

Tar -xvzf phpMemcachedAdmin-1.2.2-r262.tar.gz && rm -rf phpMemcachedAdmin-1.2.2-r262.tar.gz

Rekurzivno nastavite zahtevane pravice dostopa v trenutnem imeniku

Find ./ -type f -exec chmod 0644 () \; najdi ./ -tip d -exec chmod 0755 () \;

AuthType Basic AuthName "Private Area" AuthUserFile .htpasswd Zahtevaj uporabnika memcachedmanager

Create.htpasswd

Htpasswd -c .htpasswd memcachedmanager

Vnesite vaše geslo.

To je vse. Prijavite se v imenik memcachedmanager, če ga niste spremenili. Odprite https://site/phpMemcachedAdmin (spremenite domeno v svojo), vnesite svojo prijavo/geslo in uporabite

Končno

Priporočam branje članka o memcached. Razkriva splošne informacije o njem in nekatere podrobnosti njegovega dela.
To je vse. Če kaj ni jasno, postavite vprašanja v komentarjih.



Deliti