cache - prosty przykład zastosowania |
cache - prosty przykład zastosowania |
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 |
|
|
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 |
|
|
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.
|
|
|
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%) |
|
|
|
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.
|
|
|
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
|
|
|
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ć. |
|
|
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%) |
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 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 |
|
|
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!
|
|
|
Wersja Lo-Fi | Aktualny czas: 28.05.2024 - 06:41 |