DZWONEK

Są tacy, którzy czytają te wiadomości przed tobą.
Subskrybuj, aby otrzymywać świeże artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać Dzwon
Bez spamu

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:

  1. Pracuj z wartościami
  2. Pracuj z serwerami i połączeniami
  3. 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
połączyć („localhost”, 11211, 30); $ cache-\u003e add („myfirst”, 1000, MEMCACHE_COMPRESSED, 15); $ cache-\u003e set („mysecond”, 2000, MEMCACHE_COMPRESSED, 15);

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ć :)
połączyć („localhost”, 11211, 30); $ cache-\u003e add („myfirst”, 1000, MEMCACHE_COMPRESSED, 15); $ cache-\u003e set („mysecond”, 2000, MEMCACHE_COMPRESSED, 15); print_r ($ cache-\u003e get (array („myfirst”, „mysecond”)));

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).
połączyć („localhost”, 11211, 30); $ cache-\u003e add („one”, 111, 0, 15); $ cache-\u003e add („two”, 222, 0, 15); $ cache-\u003e add („trzy”, 333, 0, 15); $ cache-\u003e replace („trzy”, 777); print_r ($ cache-\u003e get (array („one”, „two”, „three”))); Tablica (\u003d\u003e 111 \u003d\u003e 222 \u003d\u003e 777)

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.
połączyć („localhost”, 11211, 30); $ cache-\u003e set („someOne”, 10, 0, 5); $ cache-\u003e increment („someOne”, 10, 0, 5); $ cache-\u003e increment („someOne”, 10, 0, 5); echo $ cache-\u003e get ("someOne"); // print 30

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.
pconnect („localhost”, 11211, 30);

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:

  1. get - aby pobrać obiekt z pamięci podręcznej;
  2. set - zapisz obiekt według klucza do pamięci podręcznej;
  3. add - zapisz obiekt w pamięci podręcznej, jeśli nie ma już takiego klucza;
  4. 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
2
3
4
5
6
7

$ memcache \u003d new Memcache ();
$ memcache -\u003e pconnect („localhost”, 3211); // Połączyć. Domyślnie możesz użyć dowolnego portu
$ key \u003d "key_1";
wartość $ \u003d tablica (1, 2, 3, 4, 5);
wygaśnięcie \u003d 600;
$ memcache -\u003e set ($ key, $ value, 0, $ expire); // Zapisz wartość na 10 minut
$ memcache -\u003e get („key_1”); // pobierz poprzednio zapisaną tablicę

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.

  1. Dodaj wiersz -l 127.0.0.1
  2. 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

  1. Otwórz plik konfiguracyjny vi /etc/memcached.conf
  2. Znajdź wartość -m 64
  3. Zmień to na -m 1024
  4. 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

  1. Otwórz /etc/php5/mods-available/memcache.ini
  2. Dodaj session.save_handler \u003d memcache session.save_path \u003d "tcp: //127.0.0.1: 11211"

Metoda rozszerzenia memcacheD

  1. Otwórz /etc/php5/mods-available/memcached.ini
  2. Dodaj session.save_handler \u003d memcached session.save_path \u003d "127.0.0.1:11211"
  3. 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.

DZWONEK

Są tacy, którzy czytają te wiadomości przed tobą.
Subskrybuj, aby otrzymywać świeże artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać Dzwon
Bez spamu