PHP
Pamięć podręczna
Szukaj…
Uwagi
Buforowanie przy użyciu memcache
Memcache jest rozproszonym systemem buforowania obiektów i wykorzystuje key-value
do przechowywania małych danych. Zanim zaczniesz wywoływać kod Memcache
do PHP, musisz się upewnić, że jest on zainstalowany. Można to zrobić za pomocą metody class_exists
w php. Po sprawdzeniu, czy moduł jest zainstalowany, zaczynasz od połączenia z instancją serwera memcache.
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
}else {
print "Not connected to cache server";
}
To sprawdzi, czy sterowniki php Memcache są zainstalowane i łączą się z instancją serwera memcache działającą na localhost.
Memcache działa jako demon i nazywa się memcached
W powyższym przykładzie połączyliśmy się tylko z jedną instancją, ale możesz także połączyć się z wieloma serwerami za pomocą
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->addServer('192.168.0.100',11211);
$cache->addServer('192.168.0.101',11211);
}
Zauważ, że w tym przypadku, w przeciwieństwie do połączenia, nie będzie żadnego aktywnego połączenia, dopóki nie spróbujesz zapisać lub pobrać wartości.
W buforowaniu istnieją trzy ważne operacje, które należy wdrożyć
- Przechowuj dane: dodaj nowe dane do serwera memcached
- Pobierz dane: pobierz dane z serwera memcached
- Usuń dane: Usuń już istniejące dane z serwera memcached
Magazyn danych
$cache
lub obiekt klasy memcached ma set
metodę, która pobiera klucz, wartość i czas do zapisania wartości dla (ttl).
$cache->set($key, $value, 0, $ttl);
Tutaj $ ttl lub czas życia to czas w sekundach, przez który memcache ma przechowywać parę na serwerze.
Otrzymać dane
$cache
lub obiekt klasy memcached ma metodę get
, która pobiera klucz i zwraca odpowiednią wartość.
$value = $cache->get($key);
W przypadku, gdy dla klucza nie zostanie ustawiona wartość, zwróci wartość null
Usunąć dane
Czasami może być konieczne usunięcie pewnej wartości pamięci podręcznej. $cache
lub instancja memcache ma metodę delete
, której można użyć do tego samego.
$cache->delete($key);
Mały scenariusz buforowania
Załóżmy prosty blog. Będzie zawierać wiele postów na stronie docelowej, które są pobierane z bazy danych przy każdym ładowaniu strony. Aby zmniejszyć liczbę zapytań SQL, możemy użyć memcached do buforowania postów. Oto bardzo mała implementacja
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
if(($data = $cache->get('posts')) != null) {
// Cache hit
// Render from cache
} else {
// Cache miss
// Query database and save results to database
// Assuming $posts is array of posts retrieved from database
$cache->set('posts', $posts,0,$ttl);
}
}else {
die("Error while connecting to cache server");
}
Pamięć podręczna za pomocą pamięci podręcznej APC
Alternative PHP Cache (APC) to darmowa i otwarta pamięć podręczna opcodu dla PHP. Jego celem jest zapewnienie bezpłatnej, otwartej i solidnej struktury do buforowania i optymalizacji pośredniego kodu PHP.
sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart
Dodaj pamięć podręczną:
apc_add ($key, $value , $ttl);
$key = unique cache key
$value = cache value
$ttl = Time To Live;
Usuń pamięć podręczną:
apc_delete($key);
Przykład ustawienia pamięci podręcznej:
if (apc_exists($key)) {
echo "Key exists: ";
echo apc_fetch($key);
} else {
echo "Key does not exist";
apc_add ($key, $value , $ttl);
}
APC jest prawie 5 razy szybszy niż Memcached.