Zend Cache
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.
Powiązane wpisy: