Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> cache - prosty przykład zastosowania
cinekz
post 2.01.2008, 17:56:17
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 6
Dołączył: 15.06.2006

Ostrzeżenie: (0%)
-----


Witam wszystkich i proszę o wyrozumiałość ;] Od dawna obijało mi się o uszy wyrażenie 'cache', ale nigdy dokładnie nie interesowałem się cóż to jest. Teraz wybiła godzina, kiedy muszę wam zadać to pytanie. Co to jest cache i jak takowe cudo zakodować? Prosiłbym o jak najprostszy przykład.
Pozdrawiam cinekz.

Ten post edytował cinekz 2.01.2008, 17:56:48
Go to the top of the page
+Quote Post
seaquest
post 2.01.2008, 18:06:49
Post #2





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


A może byś tak poszukał sam?


--------------------
Michał Płachta
Warsztat: Mac OS X Leopard, PostgreSQL, Text Mate, Retrospectiva + SVN
Go to the top of the page
+Quote Post
cinekz
post 2.01.2008, 18:09:33
Post #3





Grupa: Zarejestrowani
Postów: 50
Pomógł: 6
Dołączył: 15.06.2006

Ostrzeżenie: (0%)
-----


Albo ja jakiś ułomny jestem, albo nie za wiele informacji na ten temat. Google mi nic konkretnego nie powiedział. Tak samo szukarka na forum.
Go to the top of the page
+Quote Post
Moli
post 2.01.2008, 18:14:42
Post #4





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


http://nospor.pl/
Go to the top of the page
+Quote Post
cinekz
post 2.01.2008, 18:17:35
Post #5





Grupa: Zarejestrowani
Postów: 50
Pomógł: 6
Dołączył: 15.06.2006

Ostrzeżenie: (0%)
-----


@Moli: Zdaję sobie sprawę, że istnieje wiele gotowych bibliotek do cache'owania, ale ja pragnąłbym wiedzieć jak to ogólnie działa. Nie mam zamiaru patrzeć do źródeł, bo to nie ma większego sensu.
Go to the top of the page
+Quote Post
Moli
post 2.01.2008, 18:19:11
Post #6





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


serialize i unserialize
Go to the top of the page
+Quote Post
cinekz
post 2.01.2008, 18:23:16
Post #7





Grupa: Zarejestrowani
Postów: 50
Pomógł: 6
Dołączył: 15.06.2006

Ostrzeżenie: (0%)
-----


Czyli mniej więcej plan działania cache wygląda tak:
-sprawdzić, czy plik/wynik zapytania został zmodyfikowany
-jeżeli tak zrobić nowy plik z serializowaną zawartością
-jeżeli nie to odserializować skeszowany plik i zwrócić

Jeżeli się mylę, proszę mnie poprawić.
Go to the top of the page
+Quote Post
domis86
post 2.01.2008, 18:36:46
Post #8





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Raczej tak:
1. Kazdy kesz identyfikujemy po nazwie, ktora jest unikalna (np: "ranking-desc-page-2", "profil-usera-id-4234")
2. Z nazwy generujemy id kesza robiąc md5($nazwa) (czyli wyjdzie cos w tym stylu "a2cd34b5efdf346..").
3. Sprawdzamy, czy plik o nazwie [$id.txt] istnieje w katalogu cache, jesli tak to sprawdzamy czy zostal on zmodyfikawany $x sekund temu, gdzie $x to ustalony czas waznosci kesza. Jezeli ten kesz jest dobry to go odserializowujemy i dajemy do zmiennej $wynik oraz przechodzimy do punktu 5.
4. Jesli nie jest dobry to trzeba wygenereowac nowy wynik, dac go dop zmiennej $wynik i zapisac go zserializowanego do pliku o nazwie [$id.txt]
5. Zwracamy $wynik.


Tak wyglada mniej wiecej schemat funkcji ktora ma keszowac swoj wynik smile.gif
Jesli $x ustawimy na 999999999 to znaczy ze jest to kesz o "nieskonczej" dacie waznosci, i zeby go odnowic to musimy skasowac jego plik. Czasami jest to przydatne.

edit:
Nazwy mozna latwo generowac dla zapytań po prostu kopiujac do niej kod sql, i dajac na poczatek nazwe funkcji czy cos, np:

"getArticles - SELECT * FROM articles WHERE 1 ORDER BY updated_at"

wtedy stworza sie rozne pliki dla tej funkcji, jezeli ona czasam pobiera artykuly posortowane rosnaco, albo jesli jest paginacja.

Ten post edytował domis86 2.01.2008, 18:44:28
Go to the top of the page
+Quote Post
cinekz
post 2.01.2008, 18:41:12
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 6
Dołączył: 15.06.2006

Ostrzeżenie: (0%)
-----


@domis86: Twoja wypowiedź bardzo mi pomogła. Teraz już po krótce rozumiem. Dzięki!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.05.2024 - 06:41