Jeśli potrzebujesz bufora rozproszonego, skorzystaj z biblioteki Memcached. W przeciwnym przypadku używaj APCu.
System buforowania może znacznie poprawić wydajność aplikacji. Jednym z najpopularniejszych rozwiązań tego typu jest Memcached, który działa z wieloma językami programowania, w tym PHP.
Kiedy jednak chcemy skorzystać z serwera Memcached z poziomu skryptu PHP, to mamy do wyboru dwie różne i bardzo niemądrze nazwane biblioteki klienckie: Memcache i Memcached. Są to różne biblioteki, choć nazwy ich są prawie identyczne, i obie służą do tego samego celu — pracy z Memcached.
Wiadomo jednak, że najlepszą implementacją protokołu Memcached może się pochwalić bibliteka Memcached. Ma ona kilka cennych funkcji, których brak bibliotece Memcache i jest znacznie bardziej aktywnie rozwijana.
Jeśli jednak nie potrzebujesz dostępu do instancji Memcached z serwerów rozproszonych, lepiej skorzystaj z APCu. Biblioteka APCu jest wspomagana przez projekt PHP i ma bardzo podobną funkcjonalność do Memcached.
Instalowanie biblioteki klienckiej Memached
Po zainstalowaniu serwera Memcached należy zainstalować bibliotekę kliencką Memcached. Bez niej skrypty PHP nie miałyby możliwości komunikowania się z serwerem Memcached.
W Ubuntu 14.04 bibliotekę kliencką Memcached można zainstalować za pomocą poniższego polecenia:
sudo apt-get install php5-memcached
Zamiana Memcached na APCu
Kiedyś (przed pojawieniem się systemu Ubuntu 14.04) jako bufora kodów operacyjnych i magazynu par klucz-wartość podobnego do Memcached używano APC. Ponieważ w nowych wersjach PHP dostępny jest wbudowany bufor kodów operacyjnych, z projektu APC wydzielono APCu, który jest w istocie funkcją APC do przechowywania par klucz-wartość — zwaną również „buforem użytkownika” — pozbawioną elementów dotyczących buforowania kodów operacyjnych.
Instalowanie APCu
W systemie Ubuntu 14.04 APCu można zainstalować za pomocą poniższego polecenia terminala:
sudo apt-get install php5-apcu
Przykład
<?php
// Zapisanie kilku wartości w buforze APCu. Ewentualnie moglibyśmy określić czas istnienia elementów, ale w tym przykładzie wartości będą istnieć do czasu, aż zostaną usunięte przez śmieciarkę APCu.
apc_store('username-1532', 'Frodo Baggins');
apc_store('username-958', 'Aragorn');
apc_store('username-6389', 'Gandalf');
// Gdy wartości zostaną zapisane, może z nich korzystać każdy skrypt PHP, bez względu na to, kiedy zostanie uruchomiony!
$value = apc_fetch('username-958', $success);
if($success === true)
print($value); // Aragorn
$value = apc_fetch('username-1', $success); // Zmienna $success zostanie ustawiona na logiczną wartość false, ponieważ ten klucz nie istnieje.
if($success !== true) // Zwróć uwagę na operator !==, który szuka logicznego fłaszu, a nie wartości oznaczającej fałsz, takich jak 0 czy pusty łańcuch.
print('Nie znaleziono takiego klucza.');
apc_delete('username-958'); // Ten klucz stanie się niedostępny.
?>