Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

5 Stron V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> Cache, [klasa] php5
nospor
post
Post #41





Grupa: Moderatorzy
Postów: 36 559
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 559
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 559
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 559
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 559
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 559
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 559
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 559
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 559
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 559
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

5 Stron V  < 1 2 3 4 5 >
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: 22.10.2025 - 17:16