Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Cache, [klasa] php5
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
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 (IMG:style_emoticons/default/smile.gif)

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 (IMG:style_emoticons/default/winksmiley.jpg) ). 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.
Go to the top of the page
+Quote Post
5 Stron V   1 2 3 > »   
Start new topic
Odpowiedzi (1 - 93)
NetJaro
post
Post #2





Grupa: Zarejestrowani
Postów: 475
Pomógł: 0
Dołączył: 1.04.2005
Skąd: Warszawa

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


Gratulacje!

Ładny skrypt, podoba mi się cache plików zewnętrznych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Na prawdę dobra robota, przyda się (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dobra robota.
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
podoba mi się cache plików zewnętrznych
Tę opcję robiłem z myślą o obiektach tworzonych na podstawie plikow xml, w których trzymana jest konfiguracja aplikacji. Ale zapewne znajdą sie i inne zastosowania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Zapomnialem dodac, iż klasa pluje wyjatkami CacheException, przez co można w aplikacji wyłapac wyjatki tej wlasnie klasy i odpowiednio reagowac. W przypadku mniejszych popierdulek, generowany jest NOTICE lub WARNING.
Go to the top of the page
+Quote Post
orson
post
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


witam ...

szkoda że tylko pliki a nie np. apc :/ szukam czegoś co łączyło by zmienne aplikacji (przechowywane w apc) ze zmiennymi sesji (standardowo SESSION) poprzez spójny interfejs ... ale nic ciekawego nie widzę więc chyba skończy się na tym że napisze sam ...

ale pomysł i wykonanie bardzo dobre

pozdrawiam
Go to the top of the page
+Quote Post
bigZbig
post
Post #5





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


@nospor - pozwolilem sobie uruchomic ten przyklad prezentujacy mozliwosci Twojej klasy. Moje uwagi na goraco.

Zrezygnuj z ostrzeżen na rzecz wyjatkow. Jesli cos jest pierdolka to zwracaj true albo false, ale nie NOTICE lub WARNING. Jesli uzaleznie istnienie jakiegos elementu w cachu od pliku, a potem zapomne o tym i ten plik usune to zuytkownik zobaczy komunikaty, ktorych nie powinien widziec. Jesli bylyby to wyjatki to zawsze moglbym je jakos obsluzyc. Poza tym kiedy walniesz NOTICE to skrypt sie nie zatrzymuje i potem widze kolejne ostrzezenia tyle, ze tym razem generowane juz przez parser php.

Drugie pytanie. Czy probowales juz cachowac tym faktycznie jakis obiekt, a pobierac go potem z cachu? Przed pobraniem nie tworz zadnego innego obiektu danej klasy.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Zrezygnuj z ostrzeżen na rzecz wyjatkow. Jesli cos jest pierdolka to zwracaj true albo false, ale nie NOTICE lub WARNING. Jesli uzaleznie istnienie jakiegos elementu w cachu od pliku, a potem zapomne o tym i ten plik usune to zuytkownik zobaczy komunikaty, ktorych nie powinien widziec. Jesli bylyby to wyjatki to zawsze moglbym je jakos obsluzyc. Poza tym kiedy walniesz NOTICE to skrypt sie nie zatrzymuje i potem widze kolejne ostrzezenia tyle, ze tym razem generowane juz przez parser php.
Widzisz, rozwazalem taka mozliwosc. ALe kiedys w javie uzywalem klasy, ktora z byle popierdulą, jechala mi wyjątkiem. Normalnie szlag mnie trafial, bo chcac powiedzmy wyczyscic jakąs grupę to klasa plula mi wyjatkami gdy tej grupy nie bylo. no paranoja. musialem wiec kazda banalna instrukcje brac w try i by mi sie aplikacja nie wykaszaniala. tak mnie to wnerwilo ze postanowilem popierduly walic noticami. Wiekszosc userow obsluguje takie komunikaty (np ja) i nic na ekran jak nie chce to sie nie wywala,a informacja czasami moze sie przydac.

Cytat
Czy probowales juz cachowac tym faktycznie jakis obiekt, a pobierac go potem z cachu? Przed pobraniem nie tworz zadnego innego obiektu danej klasy.
Za bardzo nie rozumiem oco ci chodzi. No przeciez w przykladach masz wkladanie do cache, pobieranie z cache, wiec chyba juz tego uzywalem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Przyklady są banalne, ale nie chcialem sie rozpisywac.

edit: mowiac obiekt masz na mysli doslownie obiekt? Klasa nie cachuje obiektow jako takich tylko stringi, liczby i tablice

edit2: w przypadku co opisywales , mowiles ze lecialy ostrzezenia php. hmmm, tego mi sie nie udalo zrobic w tym co opisywales. jedyne jakie lecialy to odemnie. mozesz podac dokladniej sytuacje?

edit3: chyba pojde na kompromis z tymi noticami, bo faktycznie nie kazdy chce je miec. bedzie to konfigurowalne w klasie. kto bedzie chcial to mu bedzie plulo a jak nie bedzie chcial to nie bedzie plulo. domyslnie chyba ustawie by nie plulo
Go to the top of the page
+Quote Post
bigZbig
post
Post #7





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Odpalilem raz skrypt potem odswierzylem widok i zobaczylem NOTICE, ze nie ma pliku xml, a potem, ze jaks tam zmienna nie jest tablica. Nie napisze Ci dokladnie co to bylo bo nie mam w tej chwili dostepu do swojego kompa.

Co do rzucania wyjatkow z byle powodu. To faktycznie nie jest dobry pomysl. Ale pewne rzeczy mozesz obsluzyc w sposob domyslny. Jezeli chcesz usunac grupe ktorej nie ma to zwyczajnie powinienes zignorowac zadanie i dac true bo w koncu chodzi o to aby tej grupy nie bylo. I analogicznie w wielu innych przypadkach. Poza tym sa jeszcze true i false.

Masz jeszcze inne wyjscie. Flage debug. Jak true podajesz ostrzezenia jak false nic nie wyswietlasz.

Uzycie slowa obiekt mnie troszke zmylilo. Myslalem, ze serializujesz obiekty i w ten sposob je cachujesz, a przy odczycie deserializacja.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Co do rzucania wyjatkow z byle powodu. To faktycznie nie jest dobry pomysl. Ale pewne rzeczy mozesz obsluzyc w sposob domyslny. Jezeli chcesz usunac grupe ktorej nie ma to zwyczajnie powinienes zignorowac zadanie i dac true bo w koncu chodzi o to aby tej grupy nie bylo. I analogicznie w wielu innych przypadkach. Poza tym sa jeszcze true i false.

No i ja ignoruje i dodatkowo rzucam NOTICE (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
Masz jeszcze inne wyjscie. Flage debug. Jak true podajesz ostrzezenia jak false nic nie wyswietlasz.

co do debug to edytowalem w poscie poprzednim ze dorobie wlasnie tę funkcjonalnosc

Cytat
Uzycie slowa obiekt mnie troszke zmylilo. Myslalem, ze serializujesz obiekty i w ten sposob je cachujesz, a przy odczycie deserializacja.
o, i jakbys testowal dokladniej to bys dostal wyjatka ze nie przyjmuje obiektow (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Pozatym to obiektow tak ladnie nie zserializuje i potem odserializuje. to nie tablice.

dzieki bigZbig za uwagi. Napewno niedlugo dorobie ten tryb debugowania a i sprobuje wylapac ten twoj niespodziewany notice. jesli cos ci jeszcze wpadnie to glowy to sie nie krepuj. wszystkie uwagi mile widziane
Go to the top of the page
+Quote Post
bigZbig
post
Post #9





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Cytat(nospor @ 14.07.2006, 16:52 ) *
Pozatym to obiektow tak ladnie nie zserializuje i potem odserializuje. to nie tablice.


Spotkalem sie juz kiedys z tym problemem, kiedy probowalem przechowywac obiekty w sesji. Generalnie wydaje mi sie, ze da sie cos takiego zrobic uzywajac malego trika. Ale sprawdze jeszcze.


W sumie taki eksperyment mi zadzialal. Zakladajac ze ponizsza tresc znajduje sie w pliku index.php za drugim razem wywolujemy go z parametrem index.php?action=read

  1. <?php
  2. class A
  3. {
  4. private $property;
  5.  
  6. public function __construct($property) {
  7. $this->property = $property;
  8. }
  9.  
  10. public function getProperty(){
  11. return $this->property;
  12. }
  13. }
  14.  
  15. if($_GET['action'] != 'read') {
  16. $_SESSION['foo'] = 'Hello World!';
  17. $_SESSION['counter']++;
  18.  
  19. $_SESSION['A'] = serialize(new A('Eureka!'));
  20. }
  21.  echo $_SESSION['foo'] . "<br />";
  22.  echo $_SESSION['counter'] . "<br />";
  23.  $A = unserialize($_SESSION['A']);
  24.  if($A instanceOf A) {
  25. echo 'Property: ' . $A->getProperty() . "<br />";
  26.  }
  27. ?>


W sumie to nie wiem czemu mi to wczesniej nie dzialalo?

-- edit --

Byc moze dlatego ze uzywalem autoloadera, ktory nie dolanczal odpowiedniej klasy.

Ten post edytował bigZbig 14.07.2006, 16:29:21
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




hihi, http://pl.php.net/manual/pl/function.serialize.php
stary a glupi jak but... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) nigdy nie serializowalem obiektow to nawet do glowy mi nie przyszlo ze mozna:
Cytat
When serializing objects, php will attempt to call the member function __sleep() prior to serialization. This is to allow the object to do any last minute clean-up, etc. prior to being serialized. Likewise, when the object is restored using unserialize() the __wakeup() member function is called.


No to niedlugo pojawi sie wersja z poziomem debugowania oraz cachewoaniem obiektow. bede tylko musial potescic te obiekty bo nigdy tego nie robilem
Go to the top of the page
+Quote Post
bigZbig
post
Post #11





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Moglbys do tego dopisac hendlery sesji i mialbys wlasne sesje z dodatkowymi rozbudowanymi mozliwosciami dotyczacymi kontroli trwalosci zmiennych. Oczywiscie uzycie Twojego - nazwijmy to cachera w roli sesji byloby opcja, a nie domyslnym przeznaczeniem.

Domyslnie zmienne zachowywaly by sie tak jak to zwykle bywa w przypadku sesji, ale udostepnil bys specjalne metody umozliwiajace ustawienie czasu trwalosci indywidualnie dla kazdej zmiennej, lub metody umozliwiajace uzaleznienie istnienia poszczegolnych zmiennych np. od istnienia danego pliku.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No dobra, no to jest kolejna wersja.
Poprawki:
- ustawienie poziomu raportowania bledow (wlasciwosc $errorLevel)
- mozliwosc wkladania obiektów typu object (wiem, smiesznie to brzmi). Przy wkladaniu obiektow, klasa wkladanego obiektu moze zawierac magiczne metody __sleep() oraz __wakeup(), ktore wykonuje dane rzeczy przed wlozeniem obiektu do cache i po pobraniu go. Należy pamietac by metoda __sleep() zwracala tablicę zmiennych, ktore mogą byc serializowane.

@bigZbig z tymi sesjami to dobrze mowisz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) moze w przyszlosci...
Go to the top of the page
+Quote Post
Foxer
post
Post #13





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

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


Klasa wygląda bardzo fajnie i tak samo działa, ale zastanawia mnie jedna rzecz. Dlaczego czas żywotności obiektu w cache'u ustawiany jest jako parametr metody Get, a nie Put? Wydaje mi się, że żywotność powinna być określania w momencie wkładania do cache'u... podobnie jak z plikami cookies.

Ten post edytował Foxer 20.07.2006, 12:21:51
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Foxer a Ty wiesz, ze jak ja pierwszy raz widzialem podobna klase w javie to tez mnie to dziwilo. Jednak gdy zacząlem jej uzywac na powaznie zauwazylem w tym sens.

1) przy put informacje o zywotnosci musialbym trzymac w pliku razem z obiektem
2) przy put nie bylbym w stanie zmienic zywotnosci obiektu w cache. wlozylem na tydzien i nijak tego zmienic, chyba zeby pisac dodatkowe metody lub czyscic caly cache. przy get ja to sobie moge w kazdej chwili regulowac
3) przypadek teoretyczny: wkladasz obiekt do cache. korzystac z niego bedą dwie akcje. jedna akcja zadowala sie odswierzeniem miesięcznym, druga akcja potrzebuje juz tygodniowego odswierzenia. przy put tego nie osiagniesz, chyba ze wrzucisz dwa obiekty dla kazdej akcji. wiem , ze taka sytuacja raczej nie ma praktycznego miejsca, ale teoretycznie jest (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozatym wad przy get nie widze. jesli ty widzisz to prosze podaj, moze da sie cos usprawnic.
Go to the top of the page
+Quote Post
Foxer
post
Post #15





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

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


Wad również nie widzę, same zalety (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Poprostu patrząc "estetycznie" zdziwiłem się dlaczego okres ważności jest ustawiany przy Get. Oczywiście "na upartego" : P możnaby ustawiać ważność obiektu przy Put, zapisując tą informację w pliku razem z obiektem, dodać metodę która mogłaby edytować tą wartość, itd... ALE... byłoby to pozbawione sensu skoro Twój sposób jest prostrzy i szybszy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Przekonałeś mnie.
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No i jest ver. 1.2
Na sluszną uwagę nasty_psycho, wprowadzilem sterowniki operacji wejscia/wyjscia. Teraz kazdy moze sam
zdecydowac gdzie i w jaki sposob chce cacheowac dane bez ingerencji w kod klasy.
Na chwilę obecną istnieje moj domyslny sterownik operujacy na plikach. Niedlugo byc moze pojawi sie inny sterownik zapisujący dane w pamięci operacyjnej. Jak zapewne sie orientujecie przyspieszy to znacznie dzialanie cache.
Samo korzystanie z cache nie uleglo zmianie. W konstrukorze nalezy podac obiekt sterownika. Mozna jak dotej pory podac sciezke do katalogu cache, wowczas zostanie zaladowany domyslny sterownik.

Kolejną nowością jest suma kontrolna. Umozliwia ona zwalidowanie, czy obiekt zawarty w cache nie zostal ręcznie zmodyfikowany, przez co zawiera wadliwe dane.

edit:
Zgodnie z zapowiedzią pojawia się sterownik operujący na pamięci operacyjnej, przez co działanie cache jest jeszcze szybsze. Sterownik napisał nasty_psycho a ja go lekko poprawilem.
Oto przykladowy porownanie szybkosci dzialania na plikach i na pamieci:
Cytat
Porownanie szybkosci dzialania cache na plikach i na pamieci.
Czas podawany w sekundach
Pliki Pamiec
Inicjalizacja obiektow
0.00015783309936523 0.00056099891662598
Wlozenie obiektow do cache
0.086812973022461 0.014280080795288
Pobranie obiektow z cache
0.0086941719055176 0.0026149749755859
Wyczyszczenie calego cache
0.031248807907104 0.00012111663818359


Nowy sterownik, skrypt testujący oraz nowa lekko zmodyfikowana wersja Cache do pobrania wraz z paczką Cache_v1.2.1.zip.

Niedlugo planuje wydac kolejna wersje, umozliwiajaca konfigurowanie obiektow juz na poziome grup. Na poziomie grup bedzie mozna rowniez okreslic sterownik jakim dana grupa ma byc obslugiwana.

edit:
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ). 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.
Go to the top of the page
+Quote Post
gkeb
post
Post #17





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 6.03.2004

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


Klasa fajna, nawet bardzo. Zastanawia mnie tylko dostepnosc u uslugodawcow modulu "shmop". chyba nie jest zbyt popularny. I przy okazji dodatkowe pytanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) jakby w tym miejscu (mam namysli jako sterownik) spisywala sie tabela w bazie danych typu MEMORY (SQLite albo MySQL)?
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Zastanawia mnie tylko dostepnosc u uslugodawcow modulu "shmop"
Szczerze powiedziawszy to nie wiem. Ale nawet jak tego modulu nie bedzie, to Cache i tak bedzie dzialac na sterowniku dla plikow. Tak wiec nie ma problemu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
I przy okazji dodatkowe pytanie jakby w tym miejscu (mam namysli jako sterownik) spisywala sie tabela w bazie danych typu MEMORY (SQLite albo MySQL)
O widzisz. I tu moglbys napisac taki sterownik i bysmy porownali wyniki. Sam jestem ciekaw jak w tej sytuacji by se poradzila tabelka MEMORY. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit:
POjawil sie maly blad... w zasadzie to nie blad, a niedoskonalosc php (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Jesli uruchomimy php5 w trybie kompatybilnosci z php4, to obiekty do funkcji nie są juz przekazywane przez referencje, jak to jest w samym php5.
No i to powoduje, iz sterowniki dodawane do Cache w trybie kompatybilnosci nie przechadzą w oryginale, lecz tworzone są ich kopie, a to z kolei powoduje blad przy wspolpracy ze sterownikiem CacheMemoryDriver.
Aby uniknac takich problemow dodalem pare '&' tu i tam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Delikatne zmiany dostepne w paczce ver2.0
Numerka nie zmieniam bo i zmiany banalne. zmiany dotycza tylko klasy Cache. Sterowniki są nieruszone
Go to the top of the page
+Quote Post
bigZbig
post
Post #19





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


A czy dodanie tych kilku "&" nie powoduje zwracania warningow kiedy skrypt uruchamiany jest na php5 bez trybu kompatybilnosci?
Osobiscie uwazam, ze uruchamianie php5 w wersji kompatybilnosci z php4 wprowadza jedynie wiecej zamieszania i moze powodowac bledy w dzialaniu skryptow. Dlatego lepszym rozwiazaniem jest uruchomienie na serwerze obu wersji php tj 4 i 5. Z tego tez wzgledu uwazam, ze jezeli juz chcesz zapewnic aby Twoj projekt dzialal rowniez na php5 z wlaczona kompatybilnoscia to napisz poprostu swoja klase w wersji dla php4.
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A czy dodanie tych kilku "&" nie powoduje zwracania warningow kiedy skrypt uruchamiany jest na php5 bez trybu kompatybilnosci?
Nie, nie ma to zadnych negatywnych skutkow. Dla czystego php5 jest poprostu przezroczysty ampersand

Cytat
Osobiscie uwazam, ze uruchamianie php5 w wersji kompatybilnosci z php4 wprowadza jedynie wiecej zamieszania i moze powodowac bledy w dzialaniu skryptow
Zgadzam sie z Tobą, ale niektorzy taki tryb maja wlaczony.... np. moj szef (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Wprowadzilem te &, gdyz nie mają one zlego wplywu na klase, niezaleznie od trybu.
Go to the top of the page
+Quote Post
maciu
post
Post #21





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


super klasa, tylko przydałaby się jeszcze jedna funkcjonalność. Chodzi o ustawianie katalogów, w jaki mają być wgrywane pliki cache. W tej chwili mozna ustawić jeden katalog w konstruktorze klasy, a według mnie przydałoby się, aby można było ustawiać katalogi np. dla grup, czy nawet pojedynczych plików cache.

Dzięki temu raz, że można by sobie ładnie posegregować pliki, a dwa aplikacja taka byłaby wydajniejsza, gdy będziemy mieli tysiące plików cache.
Go to the top of the page
+Quote Post
nospor
post
Post #22





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
W tej chwili mozna ustawić jeden katalog w konstruktorze klasy

Nie w konstruktorze klasy, a w konstruktorze sterownika (w sumie tez klasy) operujacego na plikach. No chyba ze mowiles o poprzednich wersjach.

Co do Twojego pomyslu:
fakt, iz jest to w jednym katalogu, to raczej nie wplywa na wydajnosc. A jesli by sie uprzec, by wszystko bylo w innych katalogach, to mozna teraz zdefiniowac kilka obiektow sterownika zapisujacego w plikach, dla kazdego sterownika przypisac inny katalog, a kazdy taki sterownik przypisac do innej grupy. Dzieki temu kazda grupa bedzie miala swoj katalog. Ale to juz bedzie kombinowanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
bigZbig
post
Post #23





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Wiesz czego mi tu tylko brakuje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ? Inerfejsu dla sterowników. Poza tym miodzio.
Go to the top of the page
+Quote Post
nospor
post
Post #24





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Inerfejsu dla sterowników
Hmmm, rozwin swoją mysl, bo niwząb nie kumam o czym do mnie mowisz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Przeciez jest interfejs.

edit:
no i na PW sprawa sie wyjasnila. bigZbig byl po paru glębszych ( (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) i niedolukal tego
Go to the top of the page
+Quote Post
bigus
post
Post #25





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 28.04.2006

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


Mam taką sytuację, mam na stronie możliwość komentowania.
Cechuje pobieranie z bazy daty, autora, treść komentarza.
A czy jest możliwość aby zrobić żeby pobierało nowe komentarze ale dopiero wtedy kiedy coś dodał nowy??
A nie po upływie pewnego czasu.
Go to the top of the page
+Quote Post
nospor
post
Post #26





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A czy jest możliwość aby zrobić żeby pobierało nowe komentarze ale dopiero wtedy kiedy coś dodał nowy??
A nie po upływie pewnego czasu.

Oczywiscie. Jak ktos doda komentarz, wowczas czyscisz cache. Czyscisz albo caly cache, albo tylko grupe do ktorej naleza komenty, albo tylko dany cache, ktory trzyma komenty. Do wyboru do koloru (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Metody za to odpowiedzialne to bodajze metody z rodziny Clear... Nie pamietam dokladnie nazw bo nie mam akurat klasy przed soba
Go to the top of the page
+Quote Post
bigus
post
Post #27





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 28.04.2006

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


ok jakoś poszło ale jak chciałem to wykorzystać tutaj Plik
Plik mieści się na forum ale nie chciałem zaśmiecać, plik php tylko dodane rozszerzenie .txt

To pokazuje mi
  1. <?php
  2. Fatal error: Cannot redeclare class cacheexception in /home/test/ftp/cms/components/com_datsogallery/cache/Cache.class.php on line 661
  3. ?>

A jak skasuje
  1. <?php
  2. catch (CacheException $e){
  3. echo '<span style="color:red">'.$e->getMessage().'</span>';
  4. }
  5. ?>

to wyskakuje
  1. <?php
  2. Parse error: syntax error, unexpected T_IF, expecting T_CATCH in /home/test/ftp/cms/components/com_sef/sef.php on line 204
  3. ?>

Gdzie indziej działa np w galerii
już nie mam pomysłu robie przecież tak samo.
Go to the top of the page
+Quote Post
nospor
post
Post #28





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Fatal error: Cannot redeclare class cacheexception in /home/test/ftp/cms/components/com_datsogallery/cache/Cache.class.php on line 661

Blad ten oznacza, ze ponownie deklarujesz klase, ktora juz byla deklarowana. Z racji, iż moj CacheException jest deklarowany w tym samym pliku co klasa Cache, a do klasy Cache sie nie czepia, podejrzewam, iż gdzies masz deklarowaną jeszcze inna klase o nazwie CacheException. Gdzie? To juz musisz sam znaleźć.
Go to the top of the page
+Quote Post
bigus
post
Post #29





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 28.04.2006

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


Problem był z ścieżkami;/
dzięki
Go to the top of the page
+Quote Post
wookieb
post
Post #30





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Chciałbym tutaj napomnieć o cachowaniu danych w plikach.
Sam osobiście korzystam właściwie tylko z tej metody i ważne jest żeby nie przesadzić z ilością plików w katalogu (ponieważ wtedy cały pomysł Cache na plikach może nie spełniać swojego zadania)
Załóżmy np limit 1000. Przy zapisywaniu pliku szukamy w jego nazwie liczby dzięki której będzie można pogrupować pliki w katalogi.
Wyciągniętą liczbę dzielimy przez maksymalną liczbę plików w katalogu (1000) i stosujemy na niej floor.
Kod
$liczba=floor($liczba/1000);

Oto przykład.

Plik do zapisu object_1 zapisujemy w takiej ścieżce.
object/0/object_1

Natomiast plik object_1035 zapisujemy już w
object/1/object_1035

Mam nadzieję, że mój pomysł komuś się przyda.
Go to the top of the page
+Quote Post
rafalp
post
Post #31





Grupa: Zarejestrowani
Postów: 224
Pomógł: 18
Dołączył: 4.02.2003
Skąd: Częstochowa

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


Chciałem przetestować klase @Nospor-a, czy ktoś kto jej używa mógłby mnie naprowadzić gdzie mam zmienić zapis ścieżek tak jak napisał @wookieb o post wyżej?
Go to the top of the page
+Quote Post
Agares
post
Post #32





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 12.02.2010

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


Sam miałem dużo problemów z Cache, ten skrypt je rozwiązał. Dzięki nospor. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #33





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@rafalp wersja co ci wysłałem na maila zawiera miedzy innymi:
Sterownik bazujący na plikach pozwala zapisywac obiekty i grupy w postaci:
sciezka/do/obiektu

Tworzone zostają wówczas katalogi sciezka/do a w nich powstaje obiekt cache "obiektu".
Mozesz w ten sposob zarządzac struktura katalogów cache.
Mozesze czyscic wybrany katalog, czyscic raz na jakis czas oraz inne
Go to the top of the page
+Quote Post
holee
post
Post #34





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Chełm

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


Witam;

Właśnie próbuje ogarnąć tą klasę i prawdę mówiąc ciężko mi to idzie. Potrzebuję jakiegoś przykładu abym mógł się wzorować.
Niech przykładem będzie

Kod
$query = "
        SELECT
            dane
        FROM
            tabela        
        LIMIT 0, 5";

    $result = mysql_query($query);

    echo '<div class="reg">';

    while ($row = mysql_fetch_array($result)) {
    
        echo '<div class="reg_kont">';

        echo '<p>'.$row['tresc'].'</p>';
        echo '<span>przez '.$row[imie].'</span>';
        
        echo '</div>';

    }
    
    echo '</div>';


Jak widać prosty kod.

Teraz próbuję zastosować omawianą klasę:

Kod
    $val = $cache->Get("SELECT dane FROM tabela LIMIT 0, 5", "@queries");
    if (is_null($val)){
        $val = 'tutaj wyniki zapytania';
        $cache->Put("SELECT dane FROM tabela LIMIT 0, 5", $val, "@queries");
        echo 'Wlozono obiekt do cache: select * from tabela <br />';
    }
    else {
        echo 'Pobrano obiekt z cache: select * from tabela : '.$val.' <br />';
    }


i nie wiem co dalej (IMG:style_emoticons/default/winksmiley.jpg) Jak powinien ostatecznie wyglądać kod z zastosowaniem cachu ?
Proszę o pomoc, bo ja kombinuję już różnie od 2 godzin i żadnych efektów. Na dobrym przykładzie myślę, że będę w stanie dalej działać sam.

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #35





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W miejscu
$val = 'tutaj wyniki zapytania';
masz napisać zapytanie do pobierania danych z bazy, wykonać je (mysql_query()) a następnie wynik (tablica rekordow, obrobiony tekst czy co ty tam sobie zyczysz) zapisać w zmiennej $val
Go to the top of the page
+Quote Post
holee
post
Post #36





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Chełm

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


Coś takiego ?

Kod
$val = $cache->Get("SELECT dane FROM tabela LIMIT 0, 5", "@queries");
    if (is_null($val)){

        $query = "SELECT dane FROM tabela LIMIT 0, 5";
        $result = mysql_query($query);
        while ($row = mysql_fetch_array($result)) {
            $val = '<div class="reg_kont"><p>'.$row['tresc'].'</p><span>przez '.$row[imie].'</span></div>';
        }
      
        $cache->Put("SELECT dane FROM tabela LIMIT 0, 5", $val, "@queries");
        echo 'Wlozono obiekt do cache: select * from tabela <br />';
    }
    else {
        echo 'Pobrano obiekt z cache: select * from tabela : '.$val.' <br />';
    }


Jak widać nie jestem biegły w kodowaniu, a wręcz odwrotnie. Coś mi ten mój kod się nie podoba ;/ Proszę o wyrozumiałość.
Go to the top of the page
+Quote Post
nospor
post
Post #37





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Prawie dobrze.
Nie: $val =
a: $val .=

Widze, że robisz jako nazwe cache tresc zapytania. Zakladam więc, że włączyłeś hashowanie dla grupy @queries?
Go to the top of the page
+Quote Post
holee
post
Post #38





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Chełm

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


@nospor, powoli coś mi się udaje, wielkie dzięki. Tak, hashowanie mam włączone. Tylko jedno mnie dziwi. Po zaimplementowaniu cachu, z jednego zapytania - zrobiły się3 (IMG:style_emoticons/default/winksmiley.jpg)

Jedno jest w :
Kod
$val = $cache->Get...


Drugie w:
Kod
$val = ...


I trzecie w:
Kod
$cache->Put...


Dużo tego (IMG:style_emoticons/default/winksmiley.jpg) Tak powinno być ?

I jeszcze raz dzięki za pomoc.
Go to the top of the page
+Quote Post
nospor
post
Post #39





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jakie 3? To ze nadales dla obiektu cache nazwę taką samą jak tresc zapytania to już nie moja wina. Mogles sobie obiekt cache nazwa "ala ma kota" i juz bys mial tylko jedno zapytanie (IMG:style_emoticons/default/tongue.gif)

ALbo tresc zapytania wlozyc do zmiennej
$zm = 'SELECT dane FROM tabela LIMIT 0, 5';
I potem posługiwać się tylko zmienną.

Przecież to tylko przykład. Liczyłem, że osoby które to będą czytały wykażą się odrobiną no nie wiem, myslenia? (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
holee
post
Post #40





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Chełm

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


Wszystko działa jak należy. pomogłeś mi wiele zrozumieć, ale mam jeszcze jedno pytanko odnośnie organizacji plików cachu.

Chciałbym aby pliki danej grupy zapisywały się w oddzielnych folderach i widzę, że Twoja klasa to umożliwia - jednak nie do końca mi to działa ;/

Otóż owszem tworzy nowy folder, ale umieszcza w nim tylko plik @test

Kod
    
require('Cache.class.php');
require('drivers/CacheFileDriver.class.php');

$cache = new Cache();
$cache->AddDriver('fileDriver',new CacheFileDriver('Cache'));

$val = $cache->Get('folder/nazwa', 'folder/@test');
    if (is_null($val)){
        $val = 'tutaj wyniki zapytania';
        $cache->Put('folder/nazwa', $val, 'folder/@test');
    }
    else {
        echo $val;
    }


O czymś zapomniałem ?

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #41





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A, to przez to hashowanie
Cała nazwa obiektu "folder/nazwa" leci przez hash w wyniku czego znika folder/. No, o tym nie pomyślałem
Go to the top of the page
+Quote Post
@rtur
post
Post #42





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


Bardzo fajna i pożyteczna klasa, dziękuje.

W pliku example.php znalazłem coś takiego:
  1. //Stworzenie grupy queries. Do niej beda wkladane wyniki zapytan. Id beda hashowane.
  2. //Obsluguje ja CacheFileDriver. Czas zycia 5 minut
  3. $cache->AddGroup('@queries', array(
  4. 'lifetime'=>300,
  5. 'driver'=>'fileDriver',
  6. 'hashid'=>true));

czy parametr 'lifetime' jest wymagany?

Już piszę o co chodzi.

Mam w bazie dane które będą się zmieniać na stronie czasowo, np raz dziennie (imieniny), wiec po co mi pobierać dane co 5 minut jak one są niezmienne? wystarczy że pobiorę dane 1 raz dziennie.

Mogę prosić o podpowiedź jak powinien wyglądać kod który raz dziennie przy wejściu pierwszego użytkownika po północy usunie cache @queries 'kalendarz', i założy nowe ?

taka sama opcja potrzebna mi na każdy poniedziałek roku.

Ten post edytował @rtur 10.05.2011, 06:28:34
Go to the top of the page
+Quote Post
nospor
post
Post #43





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jeśli chcesz kasować cache raz dziennie to za lifetime ustaw wartość 'day'
Jeśli chcesz kasować raz w miesiącu to ustaw 'month'

Co do każdego poniedziałku to póki co nie ma takiej opcji.
Go to the top of the page
+Quote Post
@rtur
post
Post #44





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


A jak powinien wyglądać kod usuwający cache 'kalendarz' z grupy @queries?

czy wystarczy:

  1. require('Cache.class.php');
  2. require('drivers/CacheFileDriver.class.php');
  3.  
  4. try {
  5. //stworzenie obiektu cache.
  6. $cache = new Cache();
  7. $cache->AddDriver('fileDriver',new CacheFileDriver('Cache'));
  8.  
  9. //Stworzenie grupy queries. Do niej beda wkladane wyniki zapytan. Id beda hashowane.
  10. //Obsluguje ja CacheFileDriver. Czas zycia 5 minut
  11. $cache->AddGroup('@queries', array(
  12. 'lifetime'=>300,
  13. 'driver'=>'fileDriver',
  14. 'hashid'=>true));
  15.  
  16.  
  17. //Wyczyszczenie danego obiektu
  18. $cache->ClearObjects('kalendarz','@queries');
  19.  
  20. }
  21. catch (CacheException $e){
  22. echo '<span style="color:red">'.$e->getMessage().'</span>';
  23. }


tak sobie pomyślałem że może bym sobie to wrzucił w plik i wykonywał co określony czas z crona?

Ten post edytował @rtur 10.05.2011, 07:32:27
Go to the top of the page
+Quote Post
nospor
post
Post #45





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W paczce masz podane kody do pobierania danych z cache. Gdy cache jest już nieaktualny to generujesz obiekt na nowo i wkładasz do cache. Wszystko to masz w paczce z przykładami. Musisz zrobić dokładnie tak samo jak tam jest podane.
Gdy ustawisz czas życia obiektu na 'day' to przy pobieraniu danych z cache dostaniesz NULL w przypadku gdy właśnie wskoczył nowy dzień. Postępowanie jest dokładnie takie samo jakbyś zamiast 'day' dał 300 sekund.

Cytat
tak sobie pomyślałem że może bym sobie to wrzucił w plik i wykonywał co określony czas z crona?
Jeśli chcesz tylko czyścić to czemu to ma służyć? Przecież dokładnie ten sam efekt będziesz miał przy normalnym użyciu kodu z paczki.
No chyba, że ty ten cron robisz na ten poniedziałek, którego ja nie obsługuję - to tak, wówczas to ma sens.
Go to the top of the page
+Quote Post
@rtur
post
Post #46





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


Właśnie o ten poniedziałek mi chodzi (IMG:style_emoticons/default/smile.gif)

Go to the top of the page
+Quote Post
nospor
post
Post #47





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to ten cron powinien załatwić sprawę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
@rtur
post
Post #48





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


ale ten kod który podałem wcześniej jest wystarczający?

czy
  1. //Stworzenie grupy queries. Do niej beda wkladane wyniki zapytan. Id beda hashowane.
  2. //Obsluguje ja CacheFileDriver. Czas zycia 5 minut
  3. $cache->AddGroup('@queries', array(
  4. 'lifetime'=>300,
  5. 'driver'=>'fileDriver',
  6. 'hashid'=>true));

jest potrzebne do usuwania?
Go to the top of the page
+Quote Post
nospor
post
Post #49





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No tak, jak nie zdefiniujesz grupy z której usuwasz, to poleci wyjątek, że takiej grupy nie ma.
Go to the top of the page
+Quote Post
@rtur
post
Post #50





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


dzięki za podpowiedzi, tak się jeszcze zastanawiam jak działa ' 'lifetime'=>day, '
czy załóżmy jeśli cache zostanie utworzone dziś o 09:10 to jego czas wygasa o północy czy jutro 09:10?

bo jesli jutro 09:10 to też muszę je kasować cronem
Go to the top of the page
+Quote Post
nospor
post
Post #51





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie. cache z opcją day kasuje się dokładnie następnego dnia, niezależnie o której był utworzony dnia wcześniejszego.
A dokładnie kasowany jest dnia następnego przy pierwszej próbie jego pobrania. Jeśli pierwsza próba pobrania będzie o północy to skasuje się o północy. Jeśli pierwsza próba pobrania będzie o 02:34 to skasowany zostanie o 02:34
Go to the top of the page
+Quote Post
@rtur
post
Post #52





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


Więc chyba pozostaje mi czyszczenie cache imieninowego z crona, przecież jak ktoś wywoła pierwszy raz skrypt jednego dnia o 08:05 a drugiego o 7:02 to o mu się pokaże zawartość wczorajszego cache bo od czasu powstania nie minie 24h.

Dziękuje jeszcze raz za dokładne i rzeczowe wytłumaczenie.
Go to the top of the page
+Quote Post
nospor
post
Post #53





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




NIe zrozumiałeś totalnie....
Przecież ci tłumaczę, że day nie oznacza 24h a oznacza nowy dzien.
Jeśli cache utworzy się o 08:05 a następnego dnia ktoś go wywoła o 07:02 to cache się wyczyści i wygeneruje na nowo z dniem aktualnym - będziesz więc miał to co chcesz.
Go to the top of the page
+Quote Post
@rtur
post
Post #54





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


Faktycznie, nie zrozumiałem.

to jeszcze spytam o jedna rzecz:
czy jak tak zdefiniujemy grupę w ten sposób:
  1. $cache->AddGroup('@queries', array(
  2. 'driver'=>'fileDriver',
  3. 'hashid'=>true));

to bedzie ok, i moge potem w kodzie zdefiniowac czas 5 sek np tak ?

  1. $val = $cache->Get('zapytanie_mysql', '@queries', 5);


Przepraszam za tyle pytań ale dopiero zaczynam zabawę klasami.
Go to the top of the page
+Quote Post
nospor
post
Post #55





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak, gdy określisz czas w Get() to nadpisze on czas z grupy.
Gdy w grupie nie określisz czasu to zostanie przydzielony dla grupy czas domyślny.

Podsumowując: jest tak jak napisałeś (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
brayan.tr
post
Post #56





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 1.03.2011

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


Czy da się tak ustawić aby Cache ogóle nie było kasowane (IMG:style_emoticons/default/questionmark.gif) Tzn tylko na życzenie. Np. podczas gdy dokonuje zmiany w bazie za pomocą kodu php = odpalić czyszczenie cache w przeciwnym wypadku cache nie jest w ogóle kasowane (IMG:style_emoticons/default/questionmark.gif)

Jaki parametr ma przyjść lifetime (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #57





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ustaw za lifetime np. 5 lat. Podejrzewam, że przez ten czas sam kilka razy skasujesz na żądanie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
adam882
post
Post #58





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Bardzo fajna klasa (IMG:style_emoticons/default/smile.gif) Mam jednak problem z grupą "@queries".
Czy da się za pomocą tej klasy zrobić tak, abym dodawał do cache tylko sam wynik zapytania mysql_query() ?
Go to the top of the page
+Quote Post
nospor
post
Post #59





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




yyyy, mysql_query() czy mysql_fetch_array()? Do cache zazwyczaj zapisuje się rekordy a nie wynik mysql_query.
Tutaj o tym pisałem:
http://forum.nospor.pl/projekty/cache/cach...nych-ft252.html
Go to the top of the page
+Quote Post
adam882
post
Post #60





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


chyba źle sprecyzowałem pytanie, ale dzięki za właściwą odpowiedź i gratuluję napisania świetnej klasy (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
xxdrago
post
Post #61





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


nospor, czy ta klasa nadawała by się do trzymania danych typu:
Kod
Ram: 36 %
0.00 - 0.00 - 0.00
5 %
Stan dysku 762.40 MB / 15.00 GB


Czy lepiej po prostu za każdym razem do maszyny wysyłać komendę?

Ten post edytował xxdrago 29.12.2011, 10:42:02
Go to the top of the page
+Quote Post
nospor
post
Post #62





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W cache trzyma się dane, które przez dany okres czasu nie zmieniają się, a ich pozyskiwanie jest zasobożerne. Jeśli te dane takie są, to tak, można je trzymać w cache.
Go to the top of the page
+Quote Post
adam882
post
Post #63





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Mam problem z klasą.

Mianowicie zrobiłem sobie system komentarzy w ajaxie (lokalizacja pliku do odbierania danych: module/komentarz_ajax.php). Dałem w nim również funkcję czyszczenia cache dla podstrony, na której formularz został wywołany.
Po wywołaniu w pliku takiego kodu:
  1. $cache->ClearObjects('statystyki','@stringi');

Tworzy mi pusty katalog w lokalizacji: module/Cache (moja lokalizacja folderu cache to: Cache/ , a nie module/Cache). Nie wiem czy może mieć to znaczenie, ale plik "module/komentarz_ajax.php includuje" config.php (gdzie zadeklarowana jest klasa) - cofając się o folder ( include('../config.php'); )

Ten post edytował adam882 30.12.2011, 08:54:11
Go to the top of the page
+Quote Post
nospor
post
Post #64





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jeśli jako ścieżkę do katalogu podajesz tak: Cache to jest to ścieżka względne i leci względem aktualnego katalogu. Stąd zapewne masz problem. Musisz więc podawać ścieżkę bezwględną
Go to the top of the page
+Quote Post
adam882
post
Post #65





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


W jaki sposób można to zrobić?
Modyfikując kod:
  1. $cache->AddDriver('fileDriver',new CacheFileDriver('Cache'));

chyba nie mogę dopisać ścieżki do 'Cache' bo wywala mi błąd z tworzeniem katalogu
Go to the top of the page
+Quote Post
nospor
post
Post #66





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Albo podajesz złą ścieżkę
Albo skrypt nie ma prawa tworzenia katalogu tam gdzie podajesz

Albo więc podaj prawidłową ścieżkę
Albo nadaj właściwe prawa na tej ścieżce
Albo utwórz katalog Cache ręcznie wówczas skrypt nie będzie musiał go tworzyć
Go to the top of the page
+Quote Post
adam882
post
Post #67





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Wydaje mi się, że problem leży tylko i wyłącznie w ścieżce - po prostu skrypt jakoś nie może się cofnąć do poprzedniego katalogu, gdzie jest folder z Cache i traktuje folder "module" jako folder główny.
Problem dotyczy tylko formularza z ajaxem. W jaki sposób można podać ścieżkę do cache?
Go to the top of the page
+Quote Post
nospor
post
Post #68





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przecież ci napisałem: masz podać ścieżkę bezwzględną a nie względną. Gdy podasz ścieżkę bezwzględną, to problemu ze ścieżką na 100% nie bedzie.
Go to the top of the page
+Quote Post
adam882
post
Post #69





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


ok, ale w którym miejscu się to ustawia ? (bo gdzie próbuję to ustawić, to nie działa) W "example" nie widzę nic o ustawaniu ścieżki. Wybacz, że tak Cię męczę ..

Ten post edytował adam882 30.12.2011, 09:35:01
Go to the top of the page
+Quote Post
nospor
post
Post #70





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No tu to się ustawia:
$cache->AddDriver('fileDriver',new CacheFileDriver('Cache'));

Chcesz pełną ściezke to piszesz pełną sciezke:
$cache->AddDriver('fileDriver',new CacheFileDriver('pełnasciezkadotakalogu/Cache'));
Go to the top of the page
+Quote Post
adam882
post
Post #71





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Robiłem tak i coś takiego mi pokazało:

Fatal error: Uncaught exception 'CacheException' with message 'Can't create file/catalog: http://localhost/strony/skrypt/Cache' in C:\xampp\htdocs\strony\skrypt\class\drivers\CacheFileDriver.class.php on line 41

CacheException: Can't create file/catalog: http://localhost/strony/skrypt/Cache in C:\xampp\htdocs\strony\skrypt\class\drivers\CacheFileDriver.class.php on line 41

Czy może chodzi tutaj o podanie ścieżki na serwerze? (czy jak to się nazywa)

Ten post edytował adam882 30.12.2011, 09:50:15
Go to the top of the page
+Quote Post
nospor
post
Post #72





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Czy może chodzi tutaj o podanie ścieżki na serwerze? (czy jak to się nazywa)
rety.... tak, chodzi właśnie o ścieżke na serwerze. To co ty podajesz to jest URL...
Go to the top of the page
+Quote Post
adam882
post
Post #73





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Wybacz, ciągle się uczę. Dzięki
Go to the top of the page
+Quote Post
verio
post
Post #74





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 23.01.2007
Skąd: Wołomin

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


Czy można liczyć na jakieś wskazówki jak podłączyć tą klasę do OPT v2? (IMG:style_emoticons/default/rolleyes.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #75





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1) Nie wiem jak wygląda OPT
2) Cache za bardzo z OPT nie ma nic wspólnego. cache generuje się przed skorzystaniem do OPT. Do OPT mogą trafiać dane zarówno z bazy jak i z cache.
Go to the top of the page
+Quote Post
pitbull82
post
Post #76





Grupa: Zarejestrowani
Postów: 167
Pomógł: 0
Dołączył: 30.04.2004
Skąd: Częstochowa

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


Tworzę sobie swoją, znacznie prostszą klasę do cachowania, patrzyłem jak to zrobiłeś. Czy w CacheFileDriver w linii 62 zamiast

  1. if ($objectValue === false || is_null($objectValue))

nie powinno być czasem
  1. if ($objectValueS === false || is_null($objectValueS))

?

Ten post edytował pitbull82 11.01.2012, 19:28:51
Go to the top of the page
+Quote Post
nospor
post
Post #77





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ano powinno (IMG:style_emoticons/default/smile.gif)
Naszczeście serialize rzadko kiedy się nie udaje, więc błąd nie jest straszny, ale masz racje, jest (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
pitbull82
post
Post #78





Grupa: Zarejestrowani
Postów: 167
Pomógł: 0
Dołączył: 30.04.2004
Skąd: Częstochowa

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


To jeszcze na wszelki wypadek linia 224

  1. $res = rmdir($fileInfo->getPathname());

tutaj nie powinno być wywołanie rekurencyjne? Bo jeśli w podkatalogu będą pliki, to nie usunie katalogu.

Generalnie ładna praca, którą dosyć ciężko szybko przenalizować, ale najważniejsze że działa i jest nią zainteresowanie co widać po tym wątku (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #79





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Hehe, nie, tym razem wszystko jest ok.
Spójrz pare linijek wyżej:
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirName), RecursiveIteratorIterator::CHILD_FIRST);
rekurencję mam tu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
pitbull82
post
Post #80





Grupa: Zarejestrowani
Postów: 167
Pomógł: 0
Dołączył: 30.04.2004
Skąd: Częstochowa

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


Bez bicia przyznaję się, że nie bawiłem się jeszcze nigdy iteratorami, więc nie domyśliłem się że ten zapis załatwia rekurencję (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #81





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Hehe, ale słowo "Recursive" mogło dać ci trochę do myślenia (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Lukaszpl
post
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?
Go to the top of the page
+Quote Post
nospor
post
Post #83





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
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 (IMG:style_emoticons/default/smile.gif) 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.
Go to the top of the page
+Quote Post
Lukaszpl
post
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
Go to the top of the page
+Quote Post
nospor
post
Post #85





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A możesz ustawić nawet i dwa lata jak masz taką ochotę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
jarod21
post
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
Go to the top of the page
+Quote Post
nospor
post
Post #87





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
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.
Go to the top of the page
+Quote Post
jarod21
post
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.
Go to the top of the page
+Quote Post
nospor
post
Post #89





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
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
Go to the top of the page
+Quote Post
jarod21
post
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 (IMG:style_emoticons/default/questionmark.gif)

Pozdrawiam Jarek
Go to the top of the page
+Quote Post
nospor
post
Post #91





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Byłoby naprawde miło jakbyś uraczył nas kodem... skad mamy wiedziec gdzie lezy błąd.
Go to the top of the page
+Quote Post
jarod21
post
Post #92





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.04.2012

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


Kod poniżej

  1.  
  2. require('Cache.class.php');
  3. require('drivers/CacheFileDriver.class.php');
  4.  
  5. $db_server = 'localhost'; // server name
  6. $db_user = ''; // user name
  7. $db_pass = ''; // user password
  8. $db_name = 'baza'; // database name
  9.  
  10.  
  11. function getmicrotime()
  12. {
  13. $microtime = explode(' ', microtime());
  14. return $microtime[1] . substr($microtime[0], 1);
  15. }
  16.  
  17. function sql_connect($db_server, $db_user, $db_pass, $db_name) {
  18. if (mysql_connect($db_server , $db_user, $db_pass) and mysql_select_db($db_name)) {
  19. mysql_query("SET NAMES 'utf8'");
  20. $status = true;
  21. }
  22. else {
  23. $status = false;
  24. }
  25. return $status;
  26. }
  27.  
  28.  
  29. // set_time_limit(1200);
  30.  
  31. if(sql_connect($db_server, $db_user, $db_pass, $db_name)){
  32.  
  33. $data1 = array(92246,72682444,83043112);
  34.  
  35. $ile = count($data1);
  36.  
  37. $opcja = $_GET['o'];
  38.  
  39. $time_start = getmicrotime();
  40.  
  41.  
  42. if($opcja == 1){
  43.  
  44. try {
  45. //stworzenie obiektu cache.
  46. $cache = new Cache();
  47. $cache->AddDriver('fileDriver',new CacheFileDriver('Cache'));
  48.  
  49. $cache->AddGroup('@queries', array(
  50. 'lifetime'=>86400,
  51. 'driver'=>'fileDriver',
  52. 'hashid'=>true
  53. ));
  54.  
  55. for($j=0;$j<5000;$j++){
  56. for($i=0;$i<$ile;$i++){
  57.  
  58. $queries = "select * from katalog WHERE opcja = ".$data1[$i];
  59.  
  60. $val = $cache->Get($queries, '@queries');
  61. if (is_null($val)){
  62. $res = mysql_query($queries);
  63. $data = array();
  64. while ($row = mysql_fetch_array($res)){$data[]= $row;}
  65. $cache->Put($queries, $data, '@queries');
  66. }
  67. else {
  68. }
  69. }
  70. }
  71. }
  72. catch (CacheException $e){
  73. echo '<span style="color:red">'.$e->getMessage().'</span>';
  74. }
  75. }
  76. else {
  77. for($j=0;$j<5000;$j++){
  78. for($i=0;$i<$ile;$i++){
  79. $queries = "select * from katalog WHERE opcja = ".$data1[$i];
  80. $res = mysql_query($queries);
  81. $data = array();
  82. while ($row = mysql_fetch_array($res)){$data[]= $row;}
  83. }
  84. }
  85. }
  86. }
  87.  
  88. $time_stop = getmicrotime();
  89.  
  90. $roznica = $time_stop - $time_start;
  91. echo 'Czas wczytywania pliku: ' . $roznica;
  92.  
Go to the top of the page
+Quote Post
Pyton_000
post
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 (IMG:style_emoticons/default/wink.gif) I w tym wypadku minimalizuje ilość zapytań samych w sobie, a nie szybkość (bo tu nie ma co przyspieszać)
Go to the top of the page
+Quote Post
nospor
post
Post #94





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
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.
Go to the top of the page
+Quote Post

5 Stron V   1 2 3 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.09.2025 - 06:22