Cache w PHP - o co chodzi?

2010-09-19 15:01:38 Post #1 gość_Genadiusz

 
Witam!

Szukam od kilku dni jakiegoś prostego wytłumaczenia co to jest cache (w php) i do czego służy oraz kiedy należy go używać. Niestety nie mogę nigdzie znaleźć takich informacji.

Proszę o pomoc!

2010-09-19 15:16:30 Post #2 nospor

 
Generalnie cache służy do przyspieszenia generowania strony oraz do zmniejszenia obciążenia systemu.
Często stosuje się go do "zapamiętywania" wyników zapytań,np:
Załóżmy, że na stronie głównej wyświetlasz 5 najnowszych newsów, 5 najnowszych odpowiedzi na forum. Nie ma sensu za każdym razem po te informacje lecieć do bazy danych. Możesz po te informacje polecieć raz, a następnie zapamiętać je, czyli włożyć do cache. Gdy dane już są zapamiętane, to nie lecisz już po nie do bazy, ale pobierasz je z cache. Z założenia pobranie danych z cache jest szybsze niż z bazy danych. Oczywiście przy małych ruchu, przy małej liczbie rekordów można nie zauwazyć tego, że cache jest lepszy, ale jest
Należy pamiętać o tym, by raz na jakiś czas cache czyścic, by dane w nim zawarte były w miarę świeże. Można to robić co jakiś czas, np co 10 minut, można to robić gdy dodasz jakiś news, wówczas czyścisz cache newsów, itp.

Przykładowo strona główna mego bloga wszystkie kontrolki ma w cache, przez co dopóki nie pojawi się nic nowego, to strona główna ani razu nie leci do bazy. Czyli nawet jakby padła mi baza na pare minut, to strona główna będzie się wyswietlac poprawnie.

Innym przykładem jest np. przechowywanie konfiguracji. Załóżmy, że konfigurację systemu trzymasz w pliku xml. Analiza pliku xml jest czasochłonna, a już napewno bardziej czasochłonna, niż odczytanie zwykłej tablicy php. I tutaj własnie przyda sie cache - po wczytaniu konfiguracji xml do tablicy php, zapisujesz to do cache i następnym razem czytasz już z cache a nie pliku xml. No i taki cache również czyścisz np. co dzien, gdyż raczej konfiguracja systemu nie zmienia się co 10 minut. A możesz ten cache czyścic np. wtedy gdy zmieni się plik xml.

W cache możesz też trzymać jakieś wyniki skomplikowanych operacji, czy złożonego wyświetlania. Należy pamiętać by mieć umiar i starać się umiejętnie go używać - ta wiedza przychodzi z czasem.

Jest wiele klas to obsługi cache - warto z nich skorzystać, gdyż wnoszą funkcjonalność o którą ty się nie musisz martwić: wkładasz coś do cache, mowisz ile czasu to jest ważne i klasa sama tym zarządza.

Jednym z moich projektów jest właśnie cache, więc jak masz ochotę to możesz skorzystać
cache

Acha, cache może być przechowywany w różnych miejscach: dysk (pliki), pamięć, czy nawet baza danych (wiem, dziwnie to brzmi ).

2011-11-23 22:19:26 Post #3 gość_Kamil

 
A ja chciałem spytać o taka rzecz, ponieważ pisze własną klase cache (cachowanie zapytan PDO)....

Zalóżmy że mam w modelu funkcje która pobiera mi wyniki wyszukiwania (wyszukiwarka) jest tam oczywiscie 1 parametr $string czyli po prostu wpisany ciag znaków, teraz jak identyfikowac pliki aby klasa wiedziala w którym dokladnie pliku znajduje sie rezultat zapytania wykonany z parametrem $string ?

2011-11-24 08:11:04 Post #4 nospor

 
Nazwe pliku możesz robić jako hash z całego zapytania. Jest to jedna z metod na identyfikowanie cachy zapytań.

2011-11-24 17:15:13 Post #5 gość_kamil

 
Czyli szyfrowac tresc zapytania np w md5 ?

2011-11-24 17:38:39 Post #6 nospor

 
Nie szyfrować a hashować. I tak, md5 do tego celu może być.

Odpowiedz