Archiwum

Posty oznaczone ‘buforowanie’

Zend Cache

sierpień 19th, 2008 Brak komentarzy

Ostatnio dużo myślę o optymalizacji moich stronek i ulepszeniu mojego cms’a, stąd kolejny art o cachowaniu tym razem będzie mowa o Zend Cache.

Jako że pracuje na Zend framework z podłaczonym systemem szablonów Smarty rozpatruje użycie jednego z dwóch dostępnych dla mnie rozwiązań czyli Zend Cache i Cache smarty.

Wcześniej nie widziałem potrzeby buforowania szablonów, nie było mi to raczej potrzebne ale w miarę wzrastania cmsa i projektów którymi się zajmuje postanowiłem to zmienić.

Ale do rzeczy …

Zend cache można zainicjować w bardzo prosty sposób i ustawiając na początek kilka opcji

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
 
//includujemy plik z klasą Zend_Cache
require_once 'Zend/Cache.php';
 
//ustawiamy opcje frontend 
$frontendOptions = array(
   'lifetime' => 7200,     // czas życia cacha
   'automatic_serialization' => true    //włączmy automatyczną serializacje domyśnie ustawiona jest na false
);
 
//ustawiamy opcje backend
$backendOptions = array(
    'cache_dir' => './tmp/' // folder gdzie będziemy przechowywać pliki cacha
);
 
//frontend  czyli to co chcemy cachować
//dostępne opcje: Core, Output, Class, File, Function, Page
$frontend = 'Core';
 
 //backend czyli to gdzie chcemy cachować
//dostępne opcje: File, Sqlite, Memcached, Apc, ZendPlatform
$backend = 'File';
 
// odpalamy cacha za pomocą metody factory
$cache = Zend_Cache::factory($frontend, $backend, $frontendOptions, $backendOptions);

Opcję $frontend = ‘Core’ możemy zastosować do buforowania zapytań do bazy danych np.

1
2
3
4
5
6
7
8
9
10
11
12
 
if(!$result = $cache->load('myresult')) {
 
    // gdy nie macacha pobieramy dane z bazy
    $result = $db->fetchAll('SELECT * FROM huge_table');
 
    // i zapisujemy cache
    $cache->save($result, 'myresult');
 
}
//dane możemy dalej przetwarzać lub wydrukować
print_r($result);

Do cachowania wyjścia używamy trochę innych metod (start i end):

1
2
3
4
5
6
7
8
9
10
11
12
 
//ustawiamy opcję Output w metodzie factory
$cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);
 
// do metody start musimy przekazać unikalny identyfikator
if(!$cache->start('mypage')) {
    echo 'Hello world! ';
    echo 'This is cached ('.time().') ';
 
    $cache->end(); // zapisujemy wyjście i wysyłąmy do przegklądarki
 
echo 'This is never cached ('.time().').';

Tagi

Zend Cache ma przydatną opcję tagowania cacha, pomocne jest to do kategoryzowania buforów i przydatne przyczyszczeniu określonych grup (kategorii) cachy.

1
2
 
$cache->save($dane, 'uniqueID', array('tagA', 'tagB', 'tagC'));

Czyszczenie cachy

Zeby usunąć cache o określonym id wystarczy użyć metody

1
2
 
$cache->remove('idDoUsuniecia');

Żeby usunąć większą ilość zbuforowanych danych można się posłużyć metodą clean(), przyczym metoda ta może przyjmować różne przydatne opcje.

Do usunięcia wszystkich buforów użyjemy opcji Zend_Cache::CLEANING_MODE_ALL.

1
2
 
$cache->clean(Zend_Cache::CLEANING_MODE_ALL);

Do usunięcia starych (wygasłych) buforów użjemy clean() z opcją Zend_Cache::CLEANING_MODE_OLD

1
2
 
$cache->clean(Zend_Cache::CLEANING_MODE_OLD);

Do usunięcia buforów oznaczonych tagami Zend_Cache::CLEANING_MODE_MATCHING_TAG

1
2
 
$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('tagA', 'tagC'));

Do usunięcia buforów nie oznaczonych danymi tagami CLEANING_MODE_NOT_MATCHING_TAG (podajemy również tablicę tagów)

1
2
 
$cache->clean(Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG, array('tagA', 'tagC'));

Zend Cache posiada jeszcze kilka ciekawych opcji, ale te opisane powyżej w zupełności wystarczą by używać tego narzędzia.

agencja reklamowa lublin ślub i wesele senniki