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ć.

2012-11-28 18:34:44 Post #7 gość_Czytelnik

 
Wielkie sorry za odkopywanie tematu! Wypowiedź z tematu jest warta uwagi i mam pytanie jak zrobić cache przy użyciu PHP bez PDO.

Załóżmy, że mamy:
- ruch 10k dziennie na stronie
- jest 5 najnowszych newsow i 5 naj-komenatarzy
- za każdym razem strona odpytuje baze o piątke najlepszych
Możesz podać przykład najprostszego cache w tym wypadku? Na przykładzie myślę, że w pełni to zrozumiem (nie tylko ja). W Google jest pełno przykładów, większość opartych o PDO, którego nie rozumiem. Inne przykłady znalezione w sieci są zagmatwane lub zbyt skomplikowane do zrozumienia. Byłbym wdzięczny za dodatkowe wyjaśnienie na powyższym przykładzie z przykładem zastosowania PHP

Pozdrawiam

2012-11-28 18:36:57 Post #8 gość_gosc

 
a może w crona wrzucić coś, co będzie odpytywało bazę co jakiś czas i zapisywało do pliku a na stronie byś odczytywał

2012-11-28 20:25:36 Post #9 gość_czytelnik

 
Hmm, bardziej zastanawiałem się nad "nadpisywaniem" pliku ze świeżymi danymi - nie znam się, ale na logikę jeśli będę wczytywać dane z np. pliku textowego tworzonego za pomocą sposobu, który przedstawiłeś to wydajność będzie porównywalna(?) to myśl tylko teoretyczna - popraw mnie jeśli się myle.

Pozdrawiam i dzięki za odpowiedź

2012-11-28 21:22:38 Post #10 gość_gosc

 
ale przeglądarki użytkowników mogą odpytywać serwer np. kilkadziesiąt razy na min lub nawet na sek w przypadku dużego natężenia ruchu

robiąc to samo, ale 1 raz na min już oszczędzasz sporo zapytań

ale może są lepsze sposoby

2012-11-29 08:44:02 Post #11 nospor

 
W mojej paczce z cache masz przykłady jak tworzyć i używać cache. Zajrzyj tam poprostu

2012-11-29 14:05:41 Post #12 gość_czytelnik

 
Tylko, że Twój skrypt jest oparty na PDO, którego nie potrzebuję używać w moich projektach. Pozdrawiam

2012-11-29 14:13:51 Post #13 nospor

 
Gdzie Ty tam widzisz PDO? Co ma PDO do cache? Nic. Zupełnie nic.
Nawet w przykladach nie używałem PDO...

2014-07-06 12:12:24 Post #14 gość_nikyy

 
Przepraszam, że odgrzebuję stary temat. Nospor, wspominałeś, że zapisujesz w cache listę 'ostatnich', a czy np. komentarze do wpisu, oraz wpis, też warto zapisywać do cache? Zastanawiam się, aby po prostu nie przesadzić... Dziękuje, za ewentualny odzew.

2014-07-07 09:16:09 Post #15 nospor

 
Akurat u siebie zapisuje zarowno wpis jak i komentarze z pierwszej strony. Mam mało wpisow, czesto się nie zmieniają wiec moze byc. Pare razy jak baza padla na serwerze z jakiegos tam powodu, to strona działała dzieki temu cache normalnie

2014-07-23 07:07:49 Post #16 gość_kabexxx

 
Może lepiej aktualizować CACHE przy nowych wpisach do bazy? Wyniki zapytań umieścić w pliku, a zapisywanie od nowa działoby się razem ze zmianą w bazie

2014-07-23 07:09:00 Post #17 gość_kabexxx

 
PS. Nie ma jednej reguły, kiedy stosować cache, kiedy nie - zrób rachunek zysków i strat - jeśli działanie cache będzie krótsze, niż z bazy - rób ile wlezie Jeśli nie - to nie

Odpowiedz

Ostatnio komentowane

  1. ShoutBox Podświadomość
  2. ShoutBox Trilux
  3. ShoutBox morelowy-dolomit
  4. ShoutBox Lucidoremi
  5. ShoutBox Goran Lezczek
  6. ShoutBox Ktos
  7. Opcje dwuwartościowe... gosc

Ostatnio na forum

  1. Prolem z biblioteką ... ele
  2. Programista/ka PHP, ... Kamil
  3. ilość wczytywanych m... boob
  4. Humor Masłan
  5. Humor Enynsenes
  6. Humor KLOFMDMANELLIGGLOOSK
  7. Humor Goran Lezczek

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer