Cache, [klasa] php5 |
Cache, [klasa] php5 |
5.07.2006, 18:32:33
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
info
pobierz Prezentuje moją nową klasę Cache. Jak nazwa wskazuje klasa służy do zarządania cachem. Do cache'u można wkładac stringi, tablice, liczby, obiekty. Dany obiekt cache'u należy zawsze do jakiejś grupy lub do kilku grup. Gdy nie podamy grupy, obiekt trafi do grupy domyślnej. Obiekty w cache'u mają swoją żywotność, którą można regulować według własnych potrzeb. Obiekty moga byc wazne przez sekundy, minuty, godziny, dni itp... Dodatkowo można uzależnic obiekt od pliku zewnetrznego bądź też od kilku plikow. Cache straci wowczas swoją waznosc, gdy w danym pliku zewnetrznym pojawią sie jakies zmiany. Uzależnienie obiektu od kilku plikow moze byc przydatne, gdy np. tworzymy obiekt na podstawie kilku plikow xml. Nazwy obiektów mogą byc rownież hashowane. Ma to powiedzmy zastosowanie przy cacheowaniu zapytan. Zamiast nazwy "select * from tabela order by alamakota", pojawi nam sie ladny hash Czyszczenie cache odbywa sie na 4 sposoby: 1) wyczyszczenie calego cache'u 2) skasowanie wybranego(ych) obiektu(ow) 3) wyczyszczenie wybranej (ych) grupy 4) obiekt traci swoją ważność Zapraszam do używania, testowania i zgłaszania ewentualnych uwag/błędów. edit: począwszy od wersji 1.2 Cache dziala na zasadzie sterownikow I/O. Wraz z paczką dołączony jest sterownik działający na plikach oraz sterownik operujacy na pamieci, przez co obsluga Cache jest jeszcze szybsza. Dodana zostala suma kotrolna, mająca swoje zastosowanie szczegolnie przy operacjach na pamieci. edit (2006-09-08): No i jest Cache ver. 2.0 Czemu taki przeskok w numeracji? Ano odszedlem "troche" od sposobu konfiguracji cache. Wczesniej, aby moc dzialac na plikach i na pamieci trzeba bylo definiowac dwa obiekty Cache. Teraz mozliwe jest zdefiniowanie kilku sterownikow dla jednego obiektu Cache. Wprowadzilem przymus definiowania grup (domyslnie definiowana jest jedna grupa jesli komus przymus nie odpowiada ). Dzieki takiemu zastosowaniu mozna parametryzowac grupy, a co za tym idzie obiekty do nich przypisane. Mozna dla grupy okreslic jakie sterownik ma ja obslugiwac, jej czas zycia, sprawdzanie sumy, hashowanie i inne. Jesli w jakiejs chwili nam sie odmienia, ze configi zamiast na dysku maja byc zapisywane w pamieci, wystarczy wowczas tylko zmienic sterownik dla grupy, bez latania po wszystkich obiektach i zmieniania. Oczywiscie mozna zdefiniowac czas zycia obiektu w cache tylko dla niego, nadpisujac w ten sposob parametry grupy. Teraz by pobrac obiekt z cache trzeba okreslic do jakiej grupy nalezy. Wczesniej tego nie trzeba bylo robic. No ale jest to niezbedne by zaladowac chociazby odpowiedni sterownik do obslugi obiektu. Oczywiscie jak sie nie poda tego parametru, zaczytana zostanie grupa domyslna. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
11.01.2012, 19:50:43
Post
#81
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Hehe, ale słowo "Recursive" mogło dać ci trochę do myślenia
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
23.02.2012, 09:32:44
Post
#82
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 12.01.2012 Ostrzeżenie: (0%) |
Świetna sprawa z tą klasą do cache. Wdrożenie nie jest przesadnie skomplikowane, co mi się podoba. Mam dwa pytania:
1. Jeśli załaduję jakieś dane do pamięci operacyjnej z czasem na 5 minut i później usunę plik php w którym wywołałem klasę z ładowaniem danych do pamięci, co się stanie? Zostaną te dane w pamięci czy zostaną one usunięte po 5 minutach? W przypadku cache z wykorzystaniem danych na dysku one zostają dopóki nie wywołam ponownie danego pliku php z daną grupą cache. 2. Chciałbym pewne dane ładować do pamięci operacyjnej i tutaj pojawia się kwestia tego co się stanie gdy zabraknie miejsca w pamięci operacyjnej serwera? Tak pozatym, w jaki sposób mogę zweryfikować ilość dostępnej pamięci? |
|
|
23.02.2012, 09:41:48
Post
#83
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Mówisz o sterowniku APC?
ad1) Będzie tak samo jak z plikiem ad2) To apc zarządza tym. Gdy mu brakuje pamięci to.... nie pamiętam Kiedyś się bawiłem chyba na tę okazję, i jakoś sobie radził. Kasował stare wpisy czy może coś podobnego. Naprawdę teraz tego nie pamiętam. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
23.02.2012, 14:36:30
Post
#84
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 12.01.2012 Ostrzeżenie: (0%) |
Jaki jest maksymalny czas dla cache w pamięci i dyskowej? Mogę ustawić na przykład wartość 86400 (co będzie oznaczać 24 godziny), albo jeszcze więcej?
Ten post edytował Lukaszpl 23.02.2012, 14:36:52 |
|
|
23.02.2012, 14:40:50
Post
#85
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
A możesz ustawić nawet i dwa lata jak masz taką ochotę
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
11.11.2013, 13:34:26
Post
#86
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.04.2012 Ostrzeżenie: (0%) |
Witam,
Jestem początkujący i mam pytanie: Pobieram dane i zapisuje je do pliku w kataogu np Cache/user/user_1/@queries - dane zapisują się w pliku Cache a nazwy danych w Cache/user/user_1/@queries dlaczego dane nie zapisuję się tam gdzie nazwy danych? - jeśli chcę wybrać folder w CacheFileDriver("Cache/user/user_1") który nie istnieje to nie tworzy go wyskakuje błąd, muszę sprawdzać czy plik istnieje tworzyć go i dopiero ustawiać ścieżkę w CacheFileDriver . Gdzie zmienić skrypt CacheFileDriver.class.php aby dodawał foldery automatycznie? edit: przy ustawieniu CacheFileDriver("Cache/user/user_1") wyskakuje błąd : Warning: mkdir() [function.mkdir]: No such file or directory in /drivers/CacheFileDriver.class.php on line 39 Can't create file/catalog: Cache/user/user_1 Ten post edytował jarod21 11.11.2013, 17:25:10 |
|
|
12.11.2013, 07:02:44
Post
#87
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Katalogi tworzą sie automatycznie. Widac skrypt nie ma prawa do tworzenia tam katalogow
Cytat dane zapisują się w pliku Cache a nazwy danych w Cache/user/user_1/@queries dlaczego dane nie zapisuję się tam gdzie nazwy danych? Dane zapisuja sie tam gdzie im kazesz. Jak w nazwie danej nie podasz sciezki do katalogu to zapisze sie w katalogu glownym. Przejrzyj przyklady dolaczone do paczki.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.11.2013, 10:40:31
Post
#88
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.04.2012 Ostrzeżenie: (0%) |
Wiem przeglądałem kod i dziwi mnie że przy CacheFileDriver("Cache/user/user_1") wyskakuje błąd a przy $cache->AddGroup('user/user_1/@queries', array('lifetime'=>month, 'driver'=>'fileDriver','hashid'=>true)); i zapytaniu $data = $cache->Get($zapytanie1,'user/user_1/@queries'); tworzy katalogi i podkatalogi bez błędu.
|
|
|
12.11.2013, 10:57:20
Post
#89
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Poniewaz CacheFIleDriver nie tworzy zagniezdzonych katalogow ,tylko co najwyzej jeden. Gdy tworzylem klase to w zamysle do cacheFIleDriver mialo sie zapodowac katalog glowny na cache, a dopiero grupy mogly sie zagniezdzac jak im sie podoba
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
6.01.2015, 22:41:23
Post
#90
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.04.2012 Ostrzeżenie: (0%) |
Witam,
Zrobiłem test cache i wygląda, że jest 2x wolniejszy niż zapytania do bazy (baza ponad 130 000 wierszy.) Zapytuję o 3 wartości w pętli 5000 razy. Cache ma 4 pliki - zapytania i 3 pliki z danymi. Zapytania do bazy to ok 4 sek. Zapytania z cache to ok 8 sek. Wydawało mi się, że z cache powinno lecieć szybciej. Z czego wynika taka różnica Pozdrawiam Jarek |
|
|
7.01.2015, 08:02:27
Post
#91
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Byłoby naprawde miło jakbyś uraczył nas kodem... skad mamy wiedziec gdzie lezy błąd.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
7.01.2015, 11:30:37
Post
#92
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.04.2012 Ostrzeżenie: (0%) |
Kod poniżej
|
|
|
7.01.2015, 11:55:23
Post
#93
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Może być szybsze przez to że MySQL robi cache zapytania, a że wykonujesz je xxxx razy pod rząd to już sobie z cache zasysa.
Dodaj SQL_NO_CACHE po SELECT. Poza tym cache nadaje się do bardziej skomplikowanych zapytań niż zwykły select który pierdnie I w tym wypadku minimalizuje ilość zapytań samych w sobie, a nie szybkość (bo tu nie ma co przyspieszać) |
|
|
7.01.2015, 11:56:12
Post
#94
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
1) Do cache powinno się wkładać raczej jakies wieksze kawałki, a nie malutkie pojedyncze rekordy
2) Do cache sie powinno wkladac dane, ktorych generowanie zajmuje stosunkowo duzo czasu a nie ułamek micro sekundy. W takim wypadku czasami cache nie ma sensu Mi Twoj test wypada na korzysc cache, gdzie czas cache to ok 0.68420791625977 zas czas zapytan to ok 1.0938959121704 Oczywiscie wyniki te mogą być różne w zależnosci od posiadanego dysku, pamieci, procesora itp i moze sie okazac, że przy tak banalnych i szybkich zapytaniach, cache moze dzialac dluzej. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
Wersja Lo-Fi | Aktualny czas: 18.05.2024 - 11:07 |