Cache - sterownik pamięci

Do najnowszej paczki Cache 2.5 dodałem nowy sterownik operujący na pamięci przy użyciu modułu APC oraz poprawiłem sterownik główny operujący na plikach

W głównym sterowniku zauważyłem pewien problem, który może wystąpić, gdy nadamy obiekt i grupę o tej samej nazwie. Problem dotyczy jedynie paczki 2.5 i tam też tylko poprawiłem ten sterownik.

Dodatkowo dodałem kolejny sterownik zapisujący cache w pamięci operacyjnej przy pomocy modułu APC. Jest to wersja wstępna sterownika, za bardzo nie testowana przeze mnie produkcyjnie. Używajcie tego sterownika z zachowaniem zasady ograniczonego zaufania .

Cache w pamięci należy głównie używać dla danych, które są bardzo często pobierane, np. konfiguracja systemu. Jeśli jednak operujemy dużą pamięcią i możemy ją przeznaczyć na cache, to można też w pamięci przechowywać inne duże obiekty cache.

Do paczki dołączyłem też skrypt benchmarku, który pokazuje różnicę w szybkości działania obu sterowników. U mnie na laptopie sterownik APC był kilkukrotnie szybszy od standardowego działającego na plikach.

Całość do pobrania w dziale download, paczka 2.5

Komentarze

 

2010-09-21 11:47 gość_Fiddle

Przetestowałem sterownik APC u siebie na dedyku, poniżej przedstawiam różnice pomiędzy dyskiem a pamiecią ram (dysk ssd, na SATA pewnie ram wypadnie jeszcze lepiej):
(nie jest to najwyzszy wynik bo bywało tak ze przy pliku 4KB APC było 20 krotnie szybsze od dysku, najniższy zanotowany wynik przy pliku 4KB to 8x)
[img]http://screensnapr.com/u/4tnx0y.png[/img]

Wyraźnie widać ze im mniejszy plik tym bardziej opłacalne jest cachowanie przy pomocy nowego sterownika, czas dostępu do pamięci ram jest znacznie wyższy, natomiast szybkość odczytu (widocznie) nie różni się już tak znacząco

jak wrócę do domu to zrobię test z kilkunastoma małymi obiektami, zobaczymy jaka będzie różnica, podejrzewam że znacząca.

2010-09-21 12:02 nospor

Nieźle, ale u mnie róznice były rzędu kilku razy a u Ciebie jest to kilkanaście. Widać moja pamięć jest zdecydowanie wolniejsza niż Twoja, bo nie sądze bym mój dysk był szybszy od Twojego ssd

U mnie różnice w dużych a małych plikach też nie były aż tak duze jak u Ciebie

2010-09-21 13:25 gość_Fiddle

czesto się pojawia błąd przy takim loopie:
Warning: Can't create object: 3apcArray66 in /home/**/**/**.pl/public_html/**/Cache.class.php on line 277

wyniki kiedy pojawiał się bład:

[img]http://screensnapr.com/u/e5c64w.png[/img]
[img]http://screensnapr.com/u/tgr87k.png[/img]
[img]http://screensnapr.com/u/csz3yj.png[/img]
[img]http://screensnapr.com/u/nzsyeg.png[/img]
[img]http://screensnapr.com/u/qotiru.png[/img]

a tu bez żadnego błędu (jeden taz na około 15 uruchomien skryptu udało się włozyc dane bez błędu [za kazdym razem zmieniałem nazwe wkładanych danych]) :

[img]http://screensnapr.com/u/zr0xqz.png[/img]


używałem innych zmiennych do kazdego sterownika

Fragment kodu:
#...
	$val = array();
	for ($i=0; $i<25; $i++){
		$val[$i] = array(
			'index1' => 'jakas wartosc1',
			'index2' => 'jakas wartosc ssadasas da sdas d ',
			'index3' => 'jakas wartosc1',
			'index4' => 'jakas wartosc ssadasas da sdas d ',
			'index5' => 'jakas wartosc1',
		);
	}
#...
for($iAPC1 = 0; $iAPC1 < 1000; $iAPC1++)
	$cache->Put('15apcArray'. $iAPC1, $val,'@apcGroup');
	
$apcStart = microtime(true);

for($iAPC2 = 0; $iAPC2 < 1000; $iAPC2++){	
	$vAPC[$iAPC2] = $cache->Get('15apcArray'. $iAPC2, '@apcGroup');

$apcEnd = microtime(true);
$apcTime = $apcEnd - $apcStart;
#...

2010-09-21 13:30 nospor

Jakiej używasz wersji APC? Bo ja beta i też raz na jakiś czas dostawałem ten błąd. Z jakiegoś powodu nie chiał kasować obiektu z pamieci.
A pamiętam, że jak kiedyś pracowałem na stabilnej wersji to nie miałem tego błedu.

2010-09-21 13:32 gość_Fiddle

najnowszej bety, bo stabilna sie nie ciała zainstalowac...

2010-09-21 13:34 nospor

Nom, ja też najnowszej bety bo stable nie chciała się zainstalować. Moze więc to wina APC. Jesli ktoś pracuje na wersji stabilnej to bym prosił o weryfikację

2011-02-04 18:07 korey

Pojawi się jakiś poradniczek do tego jak tego się używa.?

2011-02-04 19:46 nospor

Ale czego się używa? Cache? Przykłady masz dołączonej paczce
W razie konkretnych problemów/pytań zapraszam ponownie

2011-06-17 09:43 hpsi

muszę przyznać MIND nospor, że ten skrypt po dokładniejszej analizie, przerósł moje oczekiwania, dobra robota:]'

2011-06-17 09:57 nospor

2013-03-21 15:10 gość_Slawek K.

Witam

Bardzo podoba mi sie Pańska bibliteka taki drobiazg znalazlem w niej a mianowicie czesto przekazuje czas w postaci stringa np. $czas = "22"

po prostu tak skonstruowalem sobie zmienne ze inaczej nie moge podac

$cache_tag = $cache->Get('plikczek1','default',$czas);

to oczywiscie nieprawidlowa forma bo funkcja Get oczekuje w 3 parametrze liczby wiec uczynilem tak ze do niej doczepilem taki prosty oto zabieg:

public function Get($objectId, $groups = 'default', $lifeTime = 0, $file = '', $filesPattern = ''){
$lifeTime += 0;

moge tez przed funkcja zrobic taki zabieg $czas += 0 ale za kazdym razem pamietac to nie wygodna sprawa

2013-03-21 15:44 nospor

No tak, bo bo jako czas można podać też tekst 'day', 'month'. Dlatego sprawdzam, że jak string znaczy ze ktos podaje wlasnie taką formę. Nie przyszlo mi do głowy, że ktoś może liczbe podawać jako tekst

2013-03-21 15:45 nospor

A Ty robiąc taką modyfikację:
public function Get($objectId, $groups = 'default', $lifeTime = 0, $file = '', $filesPattern = ''){
$lifeTime += 0;
pozbawiasz się możliwosci podawania czasu jako dzien czy miesiąc. No ale Twoja sprawa

2013-03-22 23:02 gość_Slawek K.

a faktycznie ale jezeli juz to i tak zbedna funkcja jak dla mnie jakies przyzwyczajenie do cyferek

2013-10-12 11:25 gość_artk

Czy w tej klasie jest taka możliwość aby cache było do pewnego niezdefiniowanego czasowo momentu, tylko jeśli zmienna ma określoną wartość? Już piszę o co chodzi. Mam skrypt który sprawdza zawartość pliku co 2 minuty, jeśli w pliku jest np "Ala ma kota" to szuka tej frazy w google i wyświetla pierwszy wynik. No ale po co ma sprawdzać w google ponownie jak zawartość pliku się nie zmienia. I tu właśnie zastosowałbym twoją klasa, czyli:

Jeśli w pliku "fraza.txt" jest fraza "Ala ma kota" to szukaj jej w google, wrzuć pierwszy wynik w cache, i wyświetl ten wynik na stronie. Po dwój minutach z crona odpalam swój skrypt na nowo i jeśli w pliku "fraza.txt" jest fraza "Ala ma kota" to pobierz dane z cache, a jeśli inna to skasuj stare cache, wyszukaj tej frazy w google, pierwszy wynik wyszukiwania wrzuć do cache i wyświetlaj ten wynik na stronie do puki nie zmieni się fraza pliku "fraza.txt"

Można zrobić coś takiego przy pomocy tej klasy?

2013-10-12 16:25 nospor

Jest mozliwosc uzaleznienia cache od pliku. Ale nie od zawartosci pliku ale od ogolnie modyfikacji pliku. Jesli plik byl modyfikowany, to cache sie odwiezy.

2013-10-12 16:53 gość_artk

A od zmiennej? chodzi o to że zmienna to zawartość z jednego elementu drzewa XML, i jak się zmieni w XML element to dopiero chciałbym szukać w google tej nowej wartości i ją wrzucić do cache a stare skasować.

2013-10-12 16:55 nospor

Jak juz pisalem: na chwile obecna cache sie odwieza gdy zmieni sie data modyfikacji danego pliku. Jesli modyfikacja pliku xm wiaze sie ze zmiana jego zawartosci to masz co chcesz.

2013-10-13 03:57 gość_artk

no to lipa bo plik jest generowany z automatu.... za każdym razem inny...

2013-10-13 10:24 gość_artk

Planujesz może taką opcję w tej klasie?
Jeśli $zmienna = 'zawartość cache' wyświetl dane z cache, w innym przypadku wykonaj kod

2013-10-14 08:21 nospor

No ale przeciez to mozesz sam teraz zrobic.

Pobierasz zawartosc cache i poruwnujesz ja ze $zmienna. Jesli sa rozne, znaczy ze musisz odswiezyc cache

2015-07-19 11:37 artur

czy czas można podać tylko słownie jako month, day, czy year, minute, hour itp też?

2015-07-19 11:52 nospor

Nie, czas sie podaje w sekundach

Dodaj komentarz

 

Dostępne bbcode: b, u, i, url, code, php, css, html, sql, js

Ostatnio komentowane

  1. Pager 2.5.1 oraz EPa... Na szybko2
  2. Pager 2.5.1 oraz EPa... Sławek
  3. Mysql - FAQ Piotr
  4. Liczba dni roboczych Na szybko2
  5. Liczba dni roboczych Naszybko
  6. Klasa widoku nospor
  7. Klasa widoku freebox

Ostatnio na forum

  1. programista php-webm... pracamatysart
  2. Programista PHP/ Mag... Create Magento 2 Marketplace
  3. Baza Danych gosc
  4. Baza Danych YankeS
  5. Baza Danych gosc
  6. Baza Danych YankeS
  7. Problem z bazą danyc... Baza Danych

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer