Moduł Memcache zapewnia wygodne interfejsy proceduralne i obiektowe dla mechanizmu buforowania memcached. Memcache to bardzo wydajny demon buforowania, który został specjalnie zaprojektowany w celu zmniejszenia obciążenia bazy danych dla mocno obciążonych, dynamicznych aplikacji internetowych.
Moduł memcache zapewnia również obsługę sesji. Więcej informacji o Memcached można znaleźć na memcached.org
Zasadniczo opisy instalacji i konfiguracji w języku rosyjskim są gotowe i można się z nimi zapoznać.
Pamiętaj, że w pamięci podręcznej możesz przechowywać dowolne typy danych: zmienne, obiekty i tablice, ALE NIE ZASOBY!
Jeśli jakikolwiek obiekt zawiera właściwość - zasób, na przykład połączenie z bazą danych, lub zawiera inny obiekt o podobnych właściwościach, wówczas tę sytuację należy traktować osobno, na przykład poprzez ponowne zdefiniowanie metody __sleep (), w której ten zasób musi zostać „zabity”, oraz metoda __wakeup (), w którym ten zasób musi zostać odnowiony.
W rzeczywistości wszystkie te metody można podzielić na 3 grupy:
- Pracuj z wartościami
- Pracuj z serwerami i połączeniami
- Odbieranie informacji
Pracuj z wartościami
Metody z tej grupy pozwalają wykonać następujące czynności:
- Ustaw wartości
- Usuń te wartości
- Zamień te wartości
- Uzyskaj dostęp do tych wartości według klucza
- Zarządzaj wartościami Żywotność
Para konkretnych metod zwiększania i zmniejszania wartości całkowitych.
Memcache :: set ()
Memcache :: add ()
Pozwala ustawić wartość, ustawić kompresję i czas życia dla tej wartości. Jedyną różnicą w zachowaniu tych metod jest to, że metoda Memcache :: add zwróci FAŁSZ, jeśli wartość dla tego klucza jest już ustawiona.
bool Memcache :: add
bool Memcache :: set (string $ key, mixed $ var [, int $ flag [, int $ expire]])
- string $ key - klucz wartości, używając go działamy na wartości.
- wartość mieszana $ var jest wartością.
- stałe
Memcache :: get ()
Zwróci żądaną wartość lub FAŁSZ w przypadku niepowodzenia lub jeśli wartość tego klucza nie została jeszcze ustawiona.
Możesz przekazać tablicę kluczy wartości, a następnie Memcache :: get również zwróci tablicę, która będzie zawierać znalezione pary klucz-wartość.
Ostrzeżenia!
Jeśli nazwa klucza zawiera ukośnik odwrotny, to wyniki będą nieprzewidywalne!
Memcached ma pewne rany: według niektórych raportów to (czasami) podatne na błędy przepełnienia bufora, co od czasu do czasu prowadzi do przepisywania [częściowych] danych, a zatem uniemożliwia deserializację struktur, należy sprawdzić, czy w wyniku otrzymania tablicy lub obiektu Memcache :: get zwraca wartość bool, dobule lub long, a następnie coś poszło nie tak.
strunowy Memcache :: get (ciąg $ key [, int i $ flags])
szyk Memcache :: get (tablica $ klucze [, tablica i flagi $])
- string $ key - klucz wartości lub tablica kluczy, których wartości chcesz uzyskać.
- int $ flag - cel tego parametru pozostaje dla mnie tajemnicą. Próbowałem użyć wartości całkowitych, ale nie dało to żadnego efektu. A przykłady podano głównie bez użycia, z czego doszedłem do wniosku: bez niego można doskonale pracować :)
Wynik:
Tablica (\u003d\u003e 1000 \u003d\u003e 2000)
Memcache :: delete ()
Usuń wartość z pamięci podręcznej.
Komentarz:
Ta metoda nie zawsze działa (zależy od wersji oprogramowania)! na końcu strony znajdują się przypadki, w których działa Memcache :: delete, a kiedy nie.
Cóż, ze stabilnych opcji pozostaje tylko zresetować niepotrzebne wartości:
$ cache-\u003e set („trzy”, NULL);
Tylko jeden minus - klucz w tym przypadku nigdzie nie idzie
strunowy Memcache :: delete (ciąg $ key [, int $ timeout \u003d 0])
- string $ key - wartość klucza do usunięcia.
- int $ timeout - ten parametr jest również przestarzały i nie jest obsługiwany, domyślnie 0 sekund. Nie używaj tej opcji.
Memcache :: replace ()
Zastąp istniejącą wartość.
Do zamiany należy użyć Memcache :: replace () istniejąca wartość. W przypadku, gdy wartość z takim kluczem nie istnieje, Memcache :: replace () zwraca FALSE. W przeciwnym razie Memcache :: replace () zachowuje się tak samo jak Memcache :: set (). Możesz także użyć funkcji memcache_replace ()
strunowy Memcache :: replace (string $ key, mixed $ var [, int $ flag [, int $ expire]])
- string $ key - klucz, którego wartość należy wymienić.
- mixed $ var to nowa wartość.
- int $ flag - Flaga wskazująca, czy użyć kompresji (tutaj Zlib jest potrzebny) dla przechowywanej wartości; możesz użyć stałych
- int $ expire - Żywotność wartości (pamięci podręcznej). Jeśli jest równy zero, to w nieskończoność. Możesz także użyć znacznika czasu lub liczby sekund, zaczynając od bieżącego czasu, ale wtedy liczba sekund nie może przekroczyć 2592000 (30 dni).
Memcache :: increment ()
Zwiększa wartość określonego klucza o określoną wartość. Jeśli wartość określonego klucza nie jest liczbą i nie można go przekonwertować na liczbę, wówczas zmieni on swoją wartość na wartość określoną jako drugi parametr. Memcache :: increment () nie tworzy elementu, jeśli jeszcze nie istnieje.
Nie zaleca się używania Memcache :: increment () z wartościami, które zostały skompresowane (ustawione flagą MEMCACHE_COMPRESSED), ponieważ wtedy będą „niespodzianki”, gdy spróbujesz uzyskać te wartości za pomocą Memcache :: get ()
Osobiście sprawdziłem i nie zauważyłem żadnych usterek :)
int Memcache :: przyrost
- string $ key - klucz, którego wartość chcesz zwiększyć.
- int $ wartość to wartość przyrostowa.
Memcache :: decrement ()
Zmniejsza wartość określonego klucza o określoną wartość. Podobnie jak Memcache :: increment (), bieżąca wartość elementu jest konwertowana na liczbową, a następnie maleje
int Memcache :: dekrementacja (ciąg $ key [, int $ wartość \u003d 1])
- string $ key - klucz, którego wartość musi zostać zmniejszona.
- int $ wartość - wartość zmniejszenia.
Memcache :: flush ()
Memcache :: flush () unieważnia wszystkie istniejące wartości. Memcache :: flush () tak naprawdę nie zwalnia zasobów pamięci, a jedynie zaznacza wszystkie elementy jako przestarzałe, a zajętej pamięci będzie można używać z nowymi wartościami. Możesz także użyć funkcji memcache_flush ()
bool Memcache :: flush (unieważnić)
Poniższy przykład niczego nie wyświetli.
połączyć („localhost”, 11211, 30); $ cache-\u003e set („someOne”, 111, 0, 5); $ cache-\u003e set („someTwo”, 222, 0, 5); $ cache-\u003e set („someTree”, 333, 0, 5); $ cache-\u003e flush (); // Wyczyść pamięć podręczną print_r ($ cache-\u003e get (array („someOne”, „someTwo”, „someTree”)));
Pracuj z serwerami i połączeniami.
Memcache może współpracować zarówno z pojedynczym serwerem, jak i pulą (zestawem) serwerów.
Jeśli do obsługi pamięci podręcznej użyjesz tylko jednego serwera, to do zainicjowania pracy wystarczy utworzyć obiekt pamięci podręcznej i użyć metody Memcache :: connect
Jeśli zamierzasz utworzyć pulę serwerów, musisz najpierw utworzyć obiekt pamięci podręcznej, a następnie użyć metody Memcache :: addServer dodaj do niego wymaganą liczbę serwerów.
Memcache :: connect ()
Ustanawia połączenie z serwerem Memcached. Połączenie, które zostało otwarte za pomocą Memcache :: connect (), zostanie automatycznie zamknięte na końcu skryptu, ale możesz je zamknąć jawnie za pomocą Memcache :: close (). Możesz także użyć funkcji memcache_connect (). Zwraca TRUE, jeśli się powiedzie, lub FALSE, jeśli wystąpi błąd.
bool Memcache :: connect
połączyć („localhost”, 11211, 30);Memcache :: pconnect ()
Ta metoda jest podobna do Memcache :: connect (), z tą różnicą, że ustanawia trwałe połączenie. To połączenie nie jest zamykane na końcu skryptu i przez wywołanie Memcache :: close (). Możesz także użyć funkcji memcache_pconnect (). Zwraca obiekt Memcache, jeśli się powiedzie, lub FALSE, jeśli wystąpi błąd.
mieszany Memcache :: pconnect (ciąg $ host [, int $ port [, int $ limit czasu]])
- Ten parametr może również określać inne transporty, takie jak unix: ///path/to/memcached.sock tj. używaj gniazd UNIX, w tym przypadku port powinien być ustawiony na 0.
- Ustaw ten parametr na 0, jeśli planujesz używać gniazd.
- int $ timeout - Limit w sekundach na połączenie z demonem. Zastanów się dwa razy, zanim zmienisz domyślną wartość 1 sekundy - możesz stracić wszystkie zalety buforowania, jeśli połączenie trwa zbyt długo.
Memcache :: close ()
Zamyka połączenie z serwerem Memcached. Ta funkcja nie zamyka trwałych połączeń, które są zamykane tylko podczas zamykania / ponownego uruchamiania serwera WWW. Możesz także użyć funkcji memcache_close ().
bool Pamięć :: zamknij (unieważnić)
Memcache :: addServer ()
Dodaje serwer do puli połączeń. Połączenie, które zostało otwarte za pomocą Memcache :: addServer (), zostanie automatycznie zamknięte na końcu skryptu, możesz także zamknąć je ręcznie za pomocą Memcache :: close (). Możesz użyć funkcji memcache_add_server ()
Podczas korzystania z Memcache :: addServer (w przeciwieństwie do Memcache :: connect () i Memcache :: PConnect ()), połączenie sieciowe nie jest ustanawiane, dopóki nie będzie faktycznie potrzebne. Dzięki temu dodanie do puli dużej liczby serwerów nie wiąże się z narzutami, nawet jeśli nie są one wcale potrzebne.
Pula serwerów zapewnia wyższą odporność na uszkodzenia. Wszelkie błędy gniazd lub błędy Memcached na poziomie serwera (inne niż błędy pamięci) spowodują redystrybucję zasobów. Błędy klienta, takie jak dodanie istniejącego klucza, nie spowodują awarii.
Komentarz:
Zwraca TRUE w przypadku sukcesu lub FALSE w przypadku błędu.
bool Memcache :: addServer (ciąg $ host [, int $ port \u003d 11211 [, bool $ trwały [, int $ waga [, int $ limit czasu [, int $ retry_interval [, bool $ status [, wywołanie $ fail_callback [, int $ timeoutms]]]]] ]]]])
- string $ host - host Memcached. Ten parametr może również określać inne transporty, takie jak unix: ///path/to/memcached.sock tj. używaj gniazd UNIX, w tym przypadku port powinien być ustawiony na 0.
- int $ port - port, na którym Memcached nasłuchuje połączeń. Ustaw ten parametr na 0, jeśli planujesz używać gniazd.
- bool $ trwały - Ustawia użycie trwałego połączenia. Wartość domyślna to PRAWDA.
- int $ weight - Im większa, tym większe prawdopodobieństwo, że ten serwer zostanie wybrany do przechowywania wartości. Te. jest to rodzaj „wagi” serwera w ogólnej puli, pośrednio jest to również szacowane obciążenie serwera.
- int $ timeout - Limit w sekundach na połączenie z demonem. Zastanów się dwa razy, zanim zmienisz domyślną wartość 1 sekundy - możesz stracić wszystkie zalety buforowania, jeśli połączenie trwa zbyt długo.
- string $ timeoutms - nie opisano.
Odbieranie informacji
Memcache :: getExtendedStats ()
Zwraca dwuwymiarową, asocjacyjną tablicę statystyk serwera. Tablica kluczy hosta: typ portu serwera. Wartości zawierają indywidualne parametry statystyczne. Serwer, który uległ awarii, zostanie ustawiony na FAŁSZ. Możesz także użyć funkcji memcache_get_extended_stats ()
Komentarz:
Ta funkcja została dodana do Memcache w wersji 2.0.0.
szyk Memcache :: getExtendedStats ([ciąg $ type [, int $ slabid [, int $ limit \u003d 100]]])
A teraz żart:
Typ statystyki „buforowany” został usunięty z Memcached ze względów bezpieczeństwa.
Przykład wyjścia informacji (połączenie bez parametrów):
Array (\u003d\u003e Array (\u003d\u003e 5179 \u003d\u003e 966862 \u003d\u003e 1336505233 \u003d\u003e 1.4.5 \u003d\u003e 64 \u003d\u003e 160.302880 \u003d\u003e 483.975109 \u003d\u003e 6 \u003d\u003e 358080 \u003d\u003e 13 \u003d\u003e 15037476 \u003d\u003e 3501979 \u003d\u003e 46 \u003d\u003e 11507898 \u003d\u003e 3529578 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 76 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 1643906080 \u003d\u003e 11298732744 \u003d\u003e 67108864 \u003d\u003e 1 \u003d\u003e 0 \u003d\u003e 4 \u003d\u003e 0 \u003d\u003e 3295454 \u003d\u003e 7623 \u003d\u003e 3501915 \u003d\u003e 0 \u003d\u003e 1825755) ...)
Memcache :: getServerStatus ()
Zwraca status serwera „online / offline”. Możesz także użyć funkcji memcache_get_server_status ()
Komentarz:
Ta funkcja została dodana do Memcache w wersji 2.0.0.
int Memcache :: getServerStatus (ciąg $ host [, int $ port \u003d 11211])
- string $ host - host Memcached.
- int $ port - port, na którym Memcached nasłuchuje połączeń.
Memcache :: getStats ()
Zwraca tablicę asocjacyjną ze statystykami serwera. Tablica kluczy odpowiada parametrom statystycznym i wartościom wartości parametru. Możesz także użyć funkcji memcache_get_stats ()
szyk Memcache :: getStatss ([ciąg $ type [, int $ slabid [, int $ limit \u003d 100]]])
- string $ type - Rodzaj statystyki. Prawidłowe wartości to (reset, malloc, mapy, pamięć podręczna, płyty, elementy, rozmiary). Zgodnie ze specyfikacją protokołu Memcached te dodatkowe argumenty „mogą ulec zmianie dla wygody programistów”.
- int $ slabid - Używany, gdy pierwszy parametr jest ustawiony na „cachedump” określa serwer, który będzie używany do debugowania.
- int $ limit - Używany, gdy pierwszy parametr jest ustawiony na „buforowany zrzut” ogranicza liczbę wpisów w zrzutu.
Memcache :: getVersion ()
Zwraca ciąg - numer wersji serwera. Możesz także użyć funkcji memcache_get_version ().
strunowy Memcache :: getVersion (unieważnić)
Memcache :: setCompressThreshold ()
Zapewnia automatyczną kompresję dużych wartości. Możesz także użyć funkcji memcache_set_compress_threshold ()
Komentarz:
Ta funkcja została dodana do Memcache w wersji 2.0.0.
bool Memcache :: setCompressThreshold (int $ próg [, float $ min_savings])
- int $ próg - minimalna długość wartości, która ma być automatycznie kompresowana.
- float $ min_savings - Określa stopień kompresji. Podana wartość musi zawierać się w przedziale od 0 do 1. Domyślna wartość 0,2 daje minimum 20% oszczędności na kompresji.
Memcache :: setServerParams ()
Zmienia ustawienia serwera bezpośrednio w czasie wykonywania. Możesz także użyć funkcji memcache_set_server_params ().
Zwraca TRUE w przypadku sukcesu lub FALSE w przypadku błędu.
Komentarz:
Ta funkcja została dodana do Memcache w wersji 2.0.0.
bool Memcache :: setServerParams (ciąg $ host [, int $ port \u003d 11211 [, int $ timeout [, int $ retry_interval \u003d false [, bool $ status [, callable $ failure_callback]]]]]])
- string $ host - host Memcached.
- int $ port - port, na którym Memcached nasłuchuje połączeń.
- int $ timeout - Limit w sekundach na połączenie z demonem. Zastanów się dwa razy, zanim zmienisz domyślną wartość 1 sekundy - możesz stracić wszystkie zalety buforowania, jeśli połączenie trwa zbyt długo.
- int $ retry_interval - Ustawia częstotliwość sondowania serwera, który uległ awarii, wartość domyślna to 15 sekund. Ustawienie tego parametru na -1 wyłącza automatyczne ponawianie zapytania.
- bool $ status - oznacza serwer jako ONLINE. Ustawienie tego parametru na FALSE i retry_interval -1 umożliwia przechowywanie uszkodzonego serwera w puli aktywnych serwerów, aby nie wpływać na algorytmy dystrybucji kluczy. Połączenia z tym serwerem zostaną rozdzielone między pozostałe dostępne serwery. Wartością domyślną jest PRAWDA, co oznacza, że \u200b\u200bserwer należy traktować jako ONLINE.
- callable $ failure_callback - Pozwala użytkownikowi określić funkcję wywołania zwrotnego, która będzie uruchamiana po wykryciu błędu. Funkcja musi przyjąć dwa parametry, nazwę hosta i port serwera, który uległ awarii.
Ten artykuł to karetka pogotowia. Szczegółowy opis konkretnych działań, które pozwalają zainstalować i skonfigurować memcached na serwerze.
Zacznijmy od definicji.
Memcached - oprogramowanie, które implementuje usługę buforowania danych w pamięci o swobodnym dostępie na podstawie tabeli skrótów.
Wstępne dane:
- Vpssystem operacyjny Debian;
- istniejąca witryna, do której można uzyskać dostęp za pośrednictwem FTP, SSH.
Zacznijmy od ostatniego akapitu. Ze względu na uruchomiony zasób internetowy (lub jego podobieństwo) możemy szybko i łatwo dowiedzieć się, co jest z nami zainstalowane (być może między innymi znajdziemy memcached). Utwórz plik o nazwie info.php, w którym piszemy:
Wykonamy kod, kontaktując się ze stroną http://example.com/info.php:
Jeśli między innymi znalazłeś podobny rekord, wszystko jest w porządku, a praca jest już wykonana. W przeciwnym razie uzyskamy ten wynik na podstawie wyników działań opisanych w tej publikacji.
Zainstaluj Memcached Server
Uruchom polecenie instalacji
Apt-get install memcached php5-memcache
Czekamy na zakończenie instalacji. Po sprawdzeniu wyników za pomocą polecenia netstat
W rezultacie otrzymujemy:
Tcp 0 0 *: 11211 *: * LISTEN 13053 / memcached
Jak widać, memcached domyślnie „nasłuchuje” na porcie 11211. Dlatego przez ten port każdy może się połączyć i korzystać z naszego serwera memcached. Zabezpieczymy się, damy takie prawo tylko naszemu serwerowi (localhost). Otwórz plik /etc/memcached.conf za pomocą panelu sterowania lub konsoli:
Vi /etc/memcached.conf
Ten plik zawiera szczegółowe komentarze. Sprawdź je.
Dodaj wiersz -l 127.0.0.1.
Ponownie uruchamiamy serwer memcached za pomocą polecenia:
/etc/init.d/memcached restart
I sprawdź ponownie:
Netstat -tap | grep memcached
W rezultacie powinniśmy uzyskać coś takiego
Tcp 0 0 localhost.localdo: 11211 *: * LISTEN 13092 / memcached
Memcached działa teraz tylko na serwerze lokalnym.
Instalacja Memcache
Lista poleceń (wersja memcache może się różnić!):
Apt-get install php5-dev libmemcache-dev pecl pobierz memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6 / phpize && ./configure --enable-memcache && make moduły cp / memcache.so / usr / lib / php5 / 20060613 / echo "extension \u003d memcache.so" \u003e\u003e /etc/php5/apache2/php.ini
Uruchom ponownie Apache:
Apachectl z gracją
Sprawdź skrypt, który opublikowaliśmy wcześniej na stronie http://example.com/info.php. Teraz musimy tam znaleźć element Memcache.
Sprawdź Memcached
Utwórz plik result.php i uruchom go.
connect („localhost”, 11211) lub exit („Nie można połączyć się z serwerem Memcached”); $ version \u003d $ memcache-\u003e getVersion (); echo „Wersja serwera”: „. $ wersja”.
\\ n "; $ tmp_object \u003d new stdClass; $ tmp_object-\u003e str_attr \u003d" test "; $ tmp_object-\u003e int_attr \u003d 123; $ memcache-\u003e set („ key ”, $ tmp_object, false, 10) lub die ((Nie okazało się, że pozostawia wpis w Memcached ”); echo„ Zapisujemy dane do pamięci podręcznej Memcached (dane będą przechowywane przez 10 sekund)
\\ n "; $ get_result \u003d $ memcache-\u003e get (" key "); echo" Dane zapisane w Memcached:
\\ n "; var_dump ($ get_result);?\u003e
Wynik skryptu:
Wersja serwera: 1.4.13 Zapis danych do pamięci podręcznej Memcached (dane będą przechowywane przez 10 sekund) Dane zapisane do pamięci Memcached: obiekt (stdClass) # 3 (2) ([„str_attr”] \u003d\u003e string (4) „test” ["int_attr"] \u003d\u003e int (123))
Czy to wszystko czy prawie tak? Wtedy wszystko jest w porządku. Jeśli nie, spróbuj ponownie.
Dzisiaj zajmiemy się ciekawym mechanizmem buforowania danych: Memcache php. Wspaniałą rzeczą w Memcahe jest to, że możemy buforować wszystko, od zapytań SQL po obiekty i dowolne inne struktury danych.
Co to jest Memcache?
Pamięć podręczna - nie jest to prosta technologia ani algorytm buforowania, przede wszystkim jest to program serwera działający na serwerze WWW. Jeśli korzystasz z usług hostingowych, to przed użyciem memkesh w aplikacji musisz upewnić się, że memcahe jest dostępny. Można to zrobić za pomocą funkcji phpinfo ().
Pojęcie
Po upewnieniu się, że serwer memcahe jest dostępny do użytku, zapoznajmy się z koncepcją tego mechanizmu buforowania. Najbardziej atrakcyjnym w użyciu memcahe php jest to, że wszystkie buforowane dane są przechowywane w pamięci RAM serwera. Ta zasada przechowywania danych nie tylko oszczędza czas procesora na ich formowaniu się wielokrotnie, ale także znacznie zwiększa szybkość dostępu do nich.
W wersji uproszczonej pojęcie memcahe można streścić w następujący sposób: często używane obiekty php są buforowane i przechowywane w pamięci RAM serwera jako zestaw par klucz-obiekt, w razie potrzeby wcześniej przechowywane obiekty są pobierane z pamięci serwera, pomijając liczne połączenia z bazą danych weryfikacji i cykli. W przypadku, gdy algorytm memcahe php nie wykrywa żądanego obiektu w pamięci, potrzebny obiekt jest tworzony w zwykły sposób i przechowywany w pamięci podręcznej.
Jak pracować z serwerem Memcache w PHP
Do pracy z serwerem Memcache potrzebujemy jednej z bibliotek PHP php-memcache lub php-memcached.
Wybór biblioteki zależy od indywidualnych potrzeb programisty, w większości są one do siebie bardzo podobne, z tą różnicą, że php-memcached zapewnia kilka wspaniałych możliwości pracy, takich jak:
- Tokeny CAS dla kluczy wersji
- Callbacki
- Metoda getDelayed () pozwala skrócić czas oczekiwania poprzez opóźnienie rzeczywistego odczytu kluczy
- Obsługa protokołu binarnego
- Możliwość uniknięcia serializacji przy użyciu igbinary
Oba moduły php-memcach i php-memcachednie są standardowe dla php, ale są dostępne w repozytorium PECL.
Jeśli nie pracujesz na własnym serwerze, ale na serwerze hostingowym, nie musisz wybierać, wszystko zostanie już skonfigurowane.
Przykład pracy
Natychmiast zwrócę uwagę na fakt, że ten przykład będzie działał na php-memcach i php-memcached w ten sam sposób.
Memcach php używa następujących metod do pracy z danymi:
- get - aby pobrać obiekt z pamięci podręcznej;
- set - zapisz obiekt według klucza do pamięci podręcznej;
- add - zapisz obiekt w pamięci podręcznej, jeśli nie ma już takiego klucza;
- replace - zapisz obiekt w pamięci podręcznej, na wypadek, gdyby klucz już istniał.
Pozwól, że podam prymitywny przykład użycia buforowania przy użyciu serwera memcache.
1 | $ memcache \u003d new Memcache (); |
Używając serwera memkesh do kilku projektów jednocześnie, pamiętaj, że dane są zapisywane w jednej pamięci o swobodnym dostępie. Oznacza to, że jeśli zapiszesz nowe wartości z różnych projektów przy użyciu tego samego klucza, to ostatnia wartość w pamięci będzie dostępna dla obu.
W wyniku zastosowania informacji podanych w tym artykule możesz zainstalować i skonfigurować serwer Memcached oraz niezbędne rozszerzenie php do interakcji z nim, a także usługę analizy i statystyki phpMemcachedAdmin
Instalacja odbędzie się w systemie Debian z serwerem zaplecza. Jeśli masz działającą grupę + php5-fpm, po prostu zamień apache2 na php5-fpm w poleceniach
Narzędzia pracy: menedżer plików do łączenia się z wbudowanym edytorem lub szpachlówką.
Załóżmy teraz, że już mamy witrynę http://example.com na tym hostingu
Aby rozpocząć, musisz ustalić, w jaki sposób skonfigurowano PHP (czy Memcached jest już zainstalowany?)). Aby to zrobić, tymczasowo utwórz plik info.php z kodem w katalogu głównym witryny
Teraz spójrz na to http://example.com/info.php
Jeśli widzimy, że istnieje podobny rekord, to wszystko jest w porządku, niezbędne rozszerzenie php jest zainstalowane.
Jeśli nie, musisz pracować.
Jak zainstalować serwer memcached
Przed instalacją musisz zaktualizować repozytorium
Apt-get update && apt-get upgrade
Teraz zainstaluj memcached i moduł php pod nim
Apt-get install memcached php5-memcache
Instalacja w toku. Po jego zakończeniu sprawdzamy, co się stało
W rezultacie zobaczymy coś takiego
Tcp 0 0 *: 11211 *: * LISTEN 13053 / memcached
Teraz musisz zrestartować Apache lub php-fpm
Ponowne uruchomienie usługi Apache2
Konfiguracja Memcached
Teraz, gdy serwer jest zainstalowany, musisz go dostosować. To nie jest trudne i nie zajmuje dużo czasu.
Zamknij Memcached z zewnątrz dostępu
Jak widać, memcached domyślnie zawiesza się na porcie 11211. Ponieważ memcached nie ma wbudowanych mechanizmów uwierzytelniania, okazuje się, że każdy może połączyć się z zewnątrz i używać go do własnych celów. Aby tego uniknąć, możesz zamknąć port 11211 zaporą ogniową lub skonfigurować serwer Memcached, aby można go było używać tylko z lokalnego hosta. Ostatnia metoda została opisana poniżej.
- Dodaj wiersz -l 127.0.0.1
Uruchom ponownie memcached
Uruchomienie usługi memcached
/etc/init.d/memcached restart
I sprawdź jeszcze raz
Netstat -tap | grep memcached
W końcu powinniśmy zobaczyć coś takiego.
Tcp 0 0 localhost.localdo: 11211 *: * LISTEN 13092 / memcached
Po wszystkich zmianach zrestartuj Apache
Ponowne uruchomienie usługi Apache2
Zwiększanie pamięci roboczej Memcached
Domyślnie Memcached używa 64 megabajtów pamięci RAM. Zwiększę do 1024, pochodzisz z parametrów twojego serwera
- Otwórz plik konfiguracyjny vi /etc/memcached.conf
- Znajdź wartość -m 64
- Zmień to na -m 1024
- Uruchom ponownie memcached service memcached restart
Przechowywanie sesji PHP w Memcached
Jeśli kilka różnych witryn korzysta z tego samego serwera lub klastra Memcached, mogą wzajemnie przechwytywać sesje i uzyskiwać dostęp do swoich kont użytkowników, co stanowi potencjalne zagrożenie
Możesz przyspieszyć php, przenosząc pamięć sesji z dysku twardego na pamięć RAM za pomocą memcached
Musisz wiedzieć, którego rozszerzenia php używasz, memcache lub memcached. , a możesz wyjaśnić, co stoi za pomocą phpinfo (), w ustawieniach są subtelności, bądź ostrożny
Metoda rozszerzenia memcache
- Otwórz /etc/php5/mods-available/memcache.ini
- Dodaj session.save_handler \u003d memcache session.save_path \u003d "tcp: //127.0.0.1: 11211"
Metoda rozszerzenia memcacheD
- Otwórz /etc/php5/mods-available/memcached.ini
- Dodaj session.save_handler \u003d memcached session.save_path \u003d "127.0.0.1:11211"
- Ponownie załaduj ponownie usługę Apache Apache2
Kontrola Phpinfo
Teraz musimy sprawdzić, co mamy na wyjściu. Aby to zrobić, otwórz stronę za pomocą phpinfo () i poszukaj kodu session.save_path w kolumnie z lokalnymi wartościami. Wartość powinna wynosić tcp: //127.0.0.1: 11211 lub 127.0.0.1:11211 ..conf), ale spójrz
php_admin_value session.save_path
Nawiasem mówiąc, możesz również użyć dyrektywy php_value, aby skonfigurować globalnie nie cały serwer, ale tylko określone witryny. Aby to zrobić, możesz edytować plik .htaccess w katalogu głównym swojej witryny
Php_value session.save_handler "memcache" php_value session.save_path "tcp: //127.0.0.1: 11211"
Gotowy, działający plik konfiguracyjny Memcached
Możesz również dostosować wszystko do swoich potrzeb, plik konfiguracyjny zawiera szczegółowe komentarze:
# memcached domyślny plik konfiguracyjny # 2003 - Jay Bonci< > # Ten plik konfiguracyjny jest odczytywany przez skrypt start-memcached podany jako # część dystrybucji Debian GNU / Linux. # Uruchom memcached jako demon. To polecenie jest dorozumiane i nie jest potrzebne do uruchomienia demona #. Zobacz README.Debian dostarczany z tym pakietem, aby uzyskać więcej # informacji. -d # Loguj wyjście memcached do / var / log / memcached logfile /var/log/memcached.log # Bądź gadatliwy # -v # Bądź jeszcze bardziej gadatliwy (drukuj także polecenia klienta) # -vv # Rozpocznij od czapki 64 megabajtów pamięci. Jest to rozsądne, a domyślny demon # Pamiętaj, że demon wzrośnie do tego rozmiaru, ale nie zaczyna utrzymywać tak dużej # pamięci # Ilość pamięci w megabajtach, która została przydzielona do buforowania. Domyślnie 64 megabajty. # -m 64 -m 1024 # Port, na którym zawiesi się Memcached, domyślnie 11211 -p 11211 # Uruchom demona jako root. Start-memcached domyślnie uruchomi się jako root, jeśli w tym pliku konfiguracyjnym nie ma komendy # -u -u memcache # Określ adres IP, którego chcesz nasłuchiwać. Domyślnie nasłuchuje na wszystkich adresach IP # Ten parametr jest jednym z niewielu środków bezpieczeństwa, które ma memcached, więc upewnij się, że # nasłuchuje na zaporze ogniowej. -L 127.0.0.1 # Ogranicz liczbę jednoczesnych połączeń przychodzących. Domyślnym demonem jest 1024 # # -c 1024 # Zablokuj całą pamięć stronicowaną. Zanim to zrobisz, skonsultuj się z README i stroną domową # -k # Błąd powrotu po wyczerpaniu pamięci (zamiast usuwania elementów) # -M # Maksymalizuj główny plik limit # -r
Zainstaluj rozszerzenie memcache
Poniżej znajdują się polecenia krok po kroku, za pomocą których można ręcznie zainstalować pamięć podręczną rozszerzenia php z konsoli
Apt-get install php5-dev libmemcache-dev pecl pobierz memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6 / phpize && ./configure --enable-memcache && make moduły cp / memcache.so / usr / lib / php5 / 20060613 / echo "extension \u003d memcache.so" \u003e\u003e /etc/php5/apache2/php.ini
Zrestartuj Apache, aby zmiany odniosły skutek
Ponowne uruchomienie usługi Apache2
Jak sprawdzić Memcached
Utwórz plik memcachetest.php w katalogu głównym witryny i napisz tam następujący kod
connect („localhost”, 11211) lub exit („Nie można połączyć się z serwerem Memcached”); $ version \u003d $ memcache-\u003e getVersion (); echo „Wersja serwera”: „. $ wersja”.
\\ n "; $ tmp_object \u003d new stdClass; $ tmp_object-\u003e str_attr \u003d" test "; $ tmp_object-\u003e int_attr \u003d 123; $ memcache-\u003e set („ key ”, $ tmp_object, false, 10) lub die ((Nie okazało się, że pozostawia wpis w Memcached ”); echo„ Zapisujemy dane do pamięci podręcznej Memcached (dane będą przechowywane przez 10 sekund)
\\ n "; $ get_result \u003d $ memcache-\u003e get (" key "); echo" Dane zapisane w Memcached:
\\ n "; var_dump ($ get_result);?\u003e
Teraz pozostaje sprawdzić wyniki: http://example.com/memcachetest.php
Jeśli wszystko zostanie wykonane poprawnie, zobaczysz coś takiego
phpMemcachedAdmin - monitorowanie, statystyki i zarządzanie memcached
phpMemcachedAdmin to oprogramowanie, które zapewnia interfejs sieciowy do monitorowania i zarządzania usługą Memcached w systemie Linux. Umożliwia wyświetlanie statystyk w czasie rzeczywistym dla wszystkich operacji obsługiwanych przez serwer: pobieranie, ustawianie, usuwanie, zwiększanie, zmniejszanie, odzyskiwanie, eksmisje, cas, a także statystyki serwera: sieć, pozycje, wersja robocza, wraz z wykresami i konfiguracją serwera wewnętrznego.
Zainstaluj i skonfiguruj phpMemcachedAdmin
Tutaj możesz przejść na kilka sposobów: wybierz osobną domenę lub subdomenę dla działania tej usługi. I możesz utworzyć podkatalog w działającej witrynie i umieścić na nim hasło lub. Opiszę ostatni sposób ustawiania hasła do folderu jako prostszego.
Załóżmy, że mamy witrynę https: // site
Cd / var / www / site
Utwórz katalog i przejdź do niego
Mkdir phpMemcachedAdmin && cd phpMemcachedAdmin
Pobierz najnowszą wersję dystrybucji
Wget http://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.tar.gz
Rozpakuj i usuń archiwum dystrybucyjne
Tar -xvzf phpMemcachedAdmin-1.2.2-r262.tar.gz && rm -rf phpMemcachedAdmin-1.2.2-r262.tar.gz
Rekurencyjnie ustaw wymagane prawa dostępu w bieżącym katalogu
Znajdź ./ -type f -exec chmod 0644 () \\; znajdź ./ -type d -exec chmod 0755 () \\;
AuthType Basic AuthName „Obszar prywatny” AuthUserFile .htpasswd Wymagane memcachedmanager
Create.htpasswd
Htpasswd -c .htpasswd memcachedmanager
Wprowadź hasło.
To wszystko. Zaloguj się do katalogu memcachedmanager, jeśli go nie zmieniłeś. Otwórz https: // site / phpMemcachedAdmin (zmień domenę na własną), wprowadź swój login / hasło i użyj
Wreszcie
Polecam przeczytać artykuł o memcached. Ujawnia ogólne informacje o nim i niektóre subtelności pracy.
To wszystko. Jeśli coś nie jest jasne, zadawaj pytania w komentarzach
Dzisiaj przedstawię ci mały fragment kodu, który nauczy Cię, jak wchodzić w interakcje z Memcache. Aby zainstalować Mediatemple na hoście, potrzebujesz danych do SSH.
Kto używa Memcache?
Memcache został opracowany przez Danga Interactive w celu zwiększenia prędkości portalu LiveJournal.com. Pamięć podręczna skraca czas ładowania bazy danych do niemal zera, co zwiększa szybkość ładowania strony dla użytkowników, przyspieszone zarządzanie zasobami itp. FaceBook jest obecnie największym użytkownikiem usługi Memcache. Biorąc pod uwagę liczbę osób przybywających codziennie na FaceBook, prawie przytłoczył tę usługę - i przydzielili osobne miejsce.
Co to jest memcache?
Cóż, stało się ciekawe? Memcache to uniwersalny system dystrybucji przedmiotów z pamięci podręcznej. Jeśli w pamięci podręcznej nie ma nic, wysyłane jest żądanie do bazy danych, a wyniki są zapisywane w Memcache:
Memcache zapewnia 5 funkcji:
- get () - pobiera wartość według klucza
- set () - ustawia wartość
- add () - dodaje pamięć podręczną, jeśli nie istnieje
- replace () - zastępuje pamięć podręczną
- flush () - usuwa wszystkie buforowane dane
Kod
Jeśli masz zainstalowany Memcache, możesz zacząć z niego korzystać. Uważa się, że dużo pamięci podręcznej jest złe. Absolutnie się z tym nie zgadzam! Im szybciej strona ładuje się - tym lepiej!
- Pierwsze dwie linie łączą się z Memcache.
- Poniżej znajduje się skrypt do połączenia z bazą danych.
- Następnie tworzymy klucz. Kiedy chcemy umieścić dane w Memcache, musimy przekazać 3 elementy do wstawienia: klucz, wartość i czas życia bufora. Klucz jest wymagany do uzyskania dostępu do danych. W tym przykładzie widać, że używam skrótu żądania jako klucza MD5.
- Następnie sprawdzamy, czy pamięć podręczna istnieje. Sprawdzanie zwróci nam wartość prawda lub fałsz. Jeśli tak, to mamy do niego dostęp.
- Jeśli nie ma pamięci podręcznej, łączymy się z bazą danych i otrzymujemy wartości. Aby utworzyć pamięć podręczną, użyj następującego wyrażenia: $ memcache-\u003e set ($ key, $ row, TRUE, 20); $ row przechowuje tablicę tego, co otrzymaliśmy z bazy danych. 20 to czas życia bufora w sekundach.
$ memcache \u003d nowy Memcache; $ memcache-\u003e connect („127.0.0.1”, 11211) lub die („Could not connect”); include („zawiera / connect.php”); // utwórz klucz, a następnie sprawdź pamięć podręczną $ key \u003d md5 ("WYBIERZ * Z memcached_test gdzie name \u003d" ashley ""); $ get_result \u003d $ memcache\u003e get ($ key); if ($ get_result) (echo $ get_result ["nazwa"]; echo $ get_result ["nazwa użytkownika"]; echo "Dane pobrane z pamięci podręcznej";) else (// Pobierz dane z bazy danych i utwórz pamięć podręczną $ query \u003d "SELECT * FROM memcached_test gdzie name \u003d "ashley"; "; $ result \u003d mysql_query ($ query); $ row \u003d mysql_fetch_array ($ result); print_r ($ row); $ memcache\u003e set ($ key, $ row, TRUE, 20) ; // Przechowuj wynik przez 20 sekund echo „Dane pobrane z bazy danych”;)
To najprostszy przykład użycia memcache, ale mam nadzieję, że to był dobry początek.