Cake PHP Buforowanie stron


Technika
CakePHP
Buforowanie stron
Cache jest mechanizmem umożliwiającym zredukowanie opóznienia w
dostarczaniu danych do użytkownika oraz zmniejszenia obciążenia serwera.
W aplikacjach internetowych często zachodzi konieczność wyświetlania tych
samych informacji wielokrotnie. Np. sklep internetowy wyświetla listę dostępnych
produktów w odpowiedzi. na każde żądanie potencjalnych klientów.
stał umieszczony w cache, jest przypisanie da-
Dowiesz się... Powinieneś wiedzieć... ty, która minęła. Znacznik idealnie nadaje się
" Poznasz różne techniki buforowania stron " Wymagana jest znajomość framework Cake- do określania polityki tworzenia cache plików
WWW oraz możliwość ich praktycznego zasto- PHP. Przydatna będzie znajomość języka SQL graficznych, które bardzo rzadko ulegają zmia-
sowania w CakePHP. i umiejętność administrowania bazą danych nie  Listing 1.
MySQL. Cache-Control: DYREKTYWA  Znacznik
określa sposób zachowania mechanizmu bu-
forowania plików (zarówno serwera WWW,
che z pominięciem wszystkich etapów, dzię- jak i serwerów proxy) mówiącego, co powin-
ki którym strona została pierwotnie wygene- no być buforowane i co może być przechowy-
Poziom trudności rowana. W praktyce odbywa się to prawie wane w cache. Najbardziej przydatne są poniż-
tak szybko jak udostępnianie statycznych sze dyrektywy:
stron HTML.
" max-age=[sekundy]  określa maksy-
ielokrotne generowanie stron, Cache przeglądarki internetowej malny czas, w którym dane są traktowa-
których zawartość nie zmienia Zamiast za każdym razem generować tę sa- ne jako aktualne (liczony względem da-
Wsię, powoduje zbędne obciążenie mą zawartość strony wystarczy przy pierw- ty określonej przez znacznik Last-Modi-
serwera WWW i bazy danych. Każde żąda- szym wyświetleniu zapamiętać ją i używać fied);
nie od użytkownika musi zostać przetworzo- przy kolejnych wywołaniach  Rysunek 1. " public  wymusza buforowane (przy-
ne, a wynik skierowany do przeglądarki in- Właściwie w każdej nowoczesnej przeglą- datne dla stron, które w normalnych
ternetowej, jednak za każdym razem serwer darce internetowej znajdują się ustawienia warunkach nie są umieszczane w ca-
pobiera te same dane. Nie stanowi to proble- związane z cache. Najczęściej jest to para- che);
mu, gdy strony przegląda kilku użytkowni- metr określający miejsce zarezerwowane
ków, ale kłopoty mogą się pojawić wraz ze na pliki tymczasowe przeglądanych stron
Listing 1. Przykładowe żądanie i odpowiedz
wzrostem popularności serwisu. Im więcej WWW. Zasady aktualizacji cache są proste.
serwera WWW
użytkowników, tym bardziej serwer będzie Przeglądarka za pomocą znaczników HTTP
obciążony wykonywaniem zadań, które pro- sprawdza, czy przechowywane dane są aktu- HEAD / HTTP/1.1
wadzą do wyświetlenia stron nieróżniących alne  Listing 1. i w miarę możliwości korzy- HOST: localhost
się od siebie wcale lub różniących się tylko sta z nich zamiast pobierać dane z Internetu. HTTP/1.1 200 OK
w niewielkim stopniu. Naturalnym rozwią- Dzięki temu powrót do poprzednio wyświe- Date: Mon, 02 Jul 2007 21:24:12 GMT
zaniem problemu spadku wydajności jest tlanej strony WWW w przeglądarce (przy- Server: Apache
zapisywanie  na boku generowanych stron cisk  wstecz ) powoduje szybkie wyświetle- Accept-Ranges: bytes
i udostępnianie ich innym użytkownikom. nie informacji, najczęściej bez konieczności X-Powered-By: PHP/4.2.2
Zamiast za każdym razem generować tą samą pobierania danych z sieci. Set-Cookie: PHPSESSID=
zawartość strony wystarczy przy pierwszym Kontrola aktualności cache odbywa się ac35d9b842215f4fb23ca419337af4b8;
wyświetleniu zapamiętać ją i używać przy za pomocą znaczników: Cache - Control, path=/
kolejnych wywołaniach. Technika ta nazywa Expires, Last-Modified oraz ETag przesyła- Expires: Thu, 19 Nov 1981 08:52:00 GMT
się page caching (pol. buforowanie stron) i jest nych w nagłówku stron WWW: Cache-Control: no-store, no-cache,
najprostszą metodą przyspieszania działania Expires: DATA_GMT  Znacznik określa ter- must-revalidate
serwisu. Przy pierwszym wyświetleniu stro- min możliwej zmiany lub wygaśnięcia ważno- Pragma: no-cache
na zostaje zapisana do pliku HTML. Każde ści dokumentu. Po upływie określonego cza- Connection: close
następne odwołanie do tej samej strony po- su (liczonego względem GMT) dokument mo- Content-Type: text/html
woduje, iż do przeglądarki użytkownika zo- że ulec zmianie lub zostać usunięty. Najprost- Content-Language: pl
stanie wysłana zawartość bezpośrednio z ca- szym sposobem wymuszenia, by plik nie zo-
50 05/2007
CakePHP
" no-cache  wymusza pominięcie cache nerowany, co przy częstych zmianach sta- nić na TRUE wartość stałej CACHE_CHECK w
(przeglądarki i serwerów proxy) i pobiera- wia pod znakiem zapytania sens używania pliku /app/config/core.php. define ('CACHE_
nie danych bezpośrednio z Internetu; tej technologii. W praktyce jednak strony CHECK', true); W kontrolerze powiązanym
" no-store  wymusza usunięcie danych z WWW można podzielić na fragmenty, które z widokiem, dla którego włączamy cache, mu-
cache zaraz po przesłaniu ich do użytkow- są statyczne, oraz na takie, które zmieniają się simy dodać CacheHelper przez umieszczenie
nika; często, i poddać buforowaniu tylko te ostat- kodu: var $helpers = array('Cache');
" must-revalidate  wymusza sprawdzanie nie. Wynikowa strona jest wtedy  składana Następnie należy określić, co chcemy umie-
stanu przedawnionych dokumentów znaj- z mniejszych bloków, z których część będzie ścić w cache. Do zmiennej $cacheAction mu-
dujących się w cache. znajdowała się w cache. Jest to bardzo intu- simy przypisać tablicę zawierającą akcje, któ-
icyjne  w przypadku sklepu internetowego re mają być buforowane, oraz czas (w sekun-
Last-Modified: DATA _ GMT Znacznik okre- lista produktów jest fragmentem, który naj- dach), przez który cache ma być aktualny
śla datę ostatniej modyfikacji dokumentu  rzadziej ulega zmianom, a z kolei koszyk za- (można używać liczb lub zapisów  1 day czy
Listing 1. ETag: ZNACZNIK  Znacznik jest kupów klienta może zmieniać się dynamicz-  60 seconds )  Listing 3.
unikalnym identyfikatorem strony genero- nie. Wykorzystanie page cache w CakePHP W praktyce zdarza się, że pewne fragmen-
wanym przez serwer WWW, który zmie- zaczniemy od zapoznania się konfiguracją ty strony są wypełniane dynamicznymi dany-
nia się za każdym razem, gdy przesyłane da- serwera. Domyślnie cache widoków jest za- mi i nie mogą znalezć się w cache ze względu
ne ulegną modyfikacji. Znaczniki możemy blokowane. By je aktywować, musimy zmie- na wyświetlane dane. Wystarczy wówczas, że
wysyłać do przeglądarki za pomocą funkcji
header()  Listing 2.
Listing 2. Przykładowe znaczniki wysyłane do przeglądarki za pomocą funkcji header()
Page cache // strona nie będzie umieszczona w cache przeglądarki
Mechanizm page cache jest powiązany z adre- // wymaga obsługi protokołu HTTP/1.1
sem URL. To na jego podstawie w kontrolerze
zapada decyzja, czy strona ma być wygenero- header("Cache-Control: no-cache, must-revalidate");
wana dynamicznie, czy też ma być użyty ca-
che. Jeżeli użytkownik już wcześniej odwoły- // data z przeszłości
wał się do określonego adresu WWW, to zo-
stał wygenerowany plik cache  o ile prezen- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
towane informacje nie uległy zmianie, to po-
Lisgin 3. Definiowanie akcji, które mają zostać buforowane przez CakePHP
nowne odwołanie do tego samego adresu spo-
woduje udostępnienie danych wcześniej wy- // Możemy zdefiniować cache dla wszystkich parametrów akcji
generowanych. Z tego faktu wynikają pewne var $cacheAction = array('view/' => 86400);
ograniczenia. Strony zależące od parametrów
przekazywanych w URL lub od informacji // lub dla każdego parametru oddzielnie.
przechowywanych w sesji nie będą mogły
skorzystać z page cache, podobnie jak strony, var $cacheAction = array(
których zawartość jest uzależniona od czasu. 'view/23/' => 21600,
Adres WWW takich witryn może być za każ- 'view/48/' => 21600
dym razem inny i w ten sposób ciągle byłyby );
tworzone kolejne pliki cache. Sposób działa-
nia page cache (buforowanie całej strony) do-
skonale sprawdza się w przypadku stron, któ-
a) Bez mechanizmu buforowania stron
rych zawartość nie zmienia się często. Jest to
trudne do osiągnięcia, jeżeli prezentowanych
Użytkownicy
jest wiele danych z różnych zródeł. Jeżeli zaj-
dą zmiany w dowolnym zródle danych, plik
Serwer WWW
cache będzie musiał zostać ponownie wyge-
Poł czenia do poszczególnych użytkowników
QUERY-CACHE
Nowoczesne bazy danych są najczęściej wy-
posażone w mechanizm QUERY-CACHE po-
wodujący zapamiętanie zapytań kierowa-
b) Z mechanizmem buforowania stron
nych do bazy oraz skojarzonych z nimi wyni-
ków. Takie samo zapytanie SQL do bazy da-
Użytkownicy
nych spowoduje przekazanie wyników prze-
chowanych w QUERY-CACHE bez koniecz-
ności odczytu informacji z plików bazoda-
Serwer WWW
nowych. Cache jest czyszczony w przypad-
ku zmian w tabelach do których zapytania
się odwołują. MySQL4 posiada błąd, któ-
ry powoduje czyszczenie całego QUERY-CA-
CHE w przypadku zmian w dowolnej tablicy,
Bufor
co niekorzystnie wpływa na czas odpowiedzi
serwera na te same zapytania.
Rysunek 1. Przesyłanie do użytkowników stron WWW
05/2007 www.phpsolmag.org 51
Technika
fragment kodu, który nie powinien być bu- zentowane błędne nieaktualne dane. W naj- tlać dane z różnych modeli danych). Zmia-
forowany, określimy za pomocą znaczników prostszym przypadku w reakcji na zmiany na danych dowolnego modelu spowoduje
oraz  Li- możemy usunąć wszystkie pliki cache. Roz- więc automatyczne usunięcie cache dla całe-
sting 4. wiązanie to ma jednak tę wadę, że nawet nie- go widoku. CakePHP automatycznie usuwa
wielka zmiana spowoduje konieczność czaso- cache, gdy nastąpi zmiana w stanie aplikacji.
Czyszczenie cache chłonnego generowania cache na nowo. Zde- Jeżeli użytkownik spowoduje działanie, któ-
Przy korzystaniu z cache kluczowym momen- cydowanie lepiej jest usuwać tylko te pliki ca- re będzie skutkowało zmianami w bazie da-
tem w funkcjonowaniu serwisu jest sposób che, które prezentują dane, które uległy zmia- nych (INSERT, UPDATE, DELETE), zosta-
reakcji na zmiany w prezentowanych danych. nie. CakePHP wykorzystuje fakt, że prezen- nie usunięte cache dla widoku powiązane-
Jeżeli nie będzie sprawnego mechanizmu in- towane na stronach WWW dane są powią- go z kontrolerem odwołującym się do mode-
formowania aplikacji, które pliki cache nale- zane z modelem danych, a cache jest związa- li danych, które uległy zmianie. Istnieje moż-
ży usunąć, to użytkownikowi zostaną zapre- ny z widokiem (który z kolei może wyświe- liwość ręcznego sterowania cache i usuwania
nieaktualnych danych za pomocą funkcji cle-
arCache(). Jako parametr przekazujemy na-
Listing 4. Przykład wyłączenia buforowania fragmentu kodu widoku
zwę kontrolera, kontrolera i akcji lub kontro-

Ostatnie 10 wiadomości!

lera, akcji i parametrów identyfikujących plik
cache  Listing 5.
wych plików cache, ale jednocześnie chcemy
uniknąć ciągłego usuwania plików. Zamiast
spowalniać działanie aplikacji ciągłym testo-
Listing 5. Funkcja clearCache() usuwająca nieaktualne pliki cache
waniem aktualności cache możemy urucho-
// Usuń wszystkie strony z cache, bazując na nazwie kontrolera mić dodatkowy proces działający w tle. Pro-
clearCache('controller'); ces ten będzie odpowiedzialny za cykliczne
czyszczenie cache co określony (konfiguro-
// Usuń wszystkie strony z cache, bazując na nazwie kontrolera i nazwie akcji walny) przedział czasowy niezależnie od ob-
ciążenia aplikacji.
clearCache('controller_action/');
Składowanie danych
// Usuń wszystkie strony z cache, bazując na nazwie kontrolera, nazwie akcji Najprostszym sposobem przechowywania
// i parametrze cache są pliki umieszczone bezpośrednio w
systemie operacyjnym (jest to jedyny sposób
// Do funkcji clearCache() można przekazywać wiele parametrów przechowywania cache obsługiwany automa-
tycznie przez CakePHP w wersji 1.1.xx). Wy-
clearCache(array('controller_action_params','controller2_action_params)); generowana strona HTML zostanie umiesz-
czona w publicznie dostępnym obszarze ser-
wera (w miejscu określonym ścieżką dostępu
wskazywaną przez stałą $CACHE)  każde od-
Memcached
wołanie do tej samej strony będzie wówczas
System cache przechowujący dane w pamięci RAM, umożliwiający zapisywanie danych i obiek-
przekierowywane na plik cache. Rozwiąza-
tów. Wysoce wydajny i skalowalny umożliwia łączenie serwerów działających w oparciu o różne
nie takie oprócz oczywistych zalet, takich jak
architektury systemowe. Stosowany m.in. w serwisach LiveJournal i Wikipedia. System memca-
ched jest dostępny w repozytoriach wielu dystrybucji Linuksa (kod zródłowy można pobrać z ad- prostota implementacji czy dobra wydajność,
resu http://www.danga.com/memcached). Obsługę memcached w PHP zapewnia binarne rozsze- ma podstawową wadę: nie jest rozwiązaniem
rzenie, dostępne na pecl.php.net.
skalowalnym. Jeżeli nasz serwis będzie się
Krótki przegląd metod API:
rozwijał i zajdzie konieczność uruchomie-
nia dodatkowego serwera WWW, to stanie-
" Memcache::add  dodaje element do serwera.
my przed problemem związanym z dystry-
" Memcache::addServer  dDodaje serwer memcached do listy wykorzystywanych serwerów.
" Memcache::close  zamyka połączenie. bucją plików cache i ich synchronizacją. Za-
" Memcache::decrement  zmniejsza wartość elementu.
pytania od użytkowników mogą być kierowa-
" Memcache::delete  usuwa element z serwera.
ne do dowolnego serwera, każdy będzie więc
" Memcache::flush  usuwa wszystkie elementy z serwera.
z nich tworzył pliki cache niezależnie. Poza
" Memcache::get  zwraca element z serwera.
tym usunięcie cache z jednego serwera nie
" Memcache::getExtendedStats  statystyki wszystkich serwerów memcached.
spowoduje usunięcia plików z pozostałych
" Memcache::getServerStatus  zwraca stan serwerów memcached.
" Memcache::getStats  statystyki serwerów.
serwerów. Można co prawda utworzyć jeden
" Memcache::getVersion  zwraca wersję serwera memcached.
wspólny sieciowy filesystem na potrzeby ca-
" Memcache::increment  inkrementuje wartość elementu.
che wszystkich serwerów, ale rozwiązanie
" Memcache::pconnect  otwiera stałe połączenie.
traci wtedy swoją prostotę. Innym rozwiąza-
" Memcache::replace  zmienia wartość podanego elementu.
niem jest umieszczanie danych cache w bazie
" Memcache::set  zapisuje dane na serwerze.
" Memcache::setCompressThreshold  włącza automatyczną kompresję dużych wartości. danych. Jest to elastyczniejsze od plików ca-
" Memcache::setServerParams  zmienia parametry i stan serwera.
che w systemie operacyjnym  głównie kosz-
tem dodatkowego obciążenia zasobów serwe-
52 05/2007
CakePHP
Listing 6. Struktury danych wykorzystane do przechowywania cache
mysql> desc dbcache; // metoda usuwająca z bazy danych wszystkie dane,
mysql> desc dbcache; // których termin ważności minął
+------------+------------------+------+-----+---------+------
----------+ function purge()
| Field | Type | Null | Key | Default | {
Extra | return $this->query("delete * from cache where
+------------+------------------+------+-----+---------+------ expires_at < NOW()");
----------+ }
| key | int(10) unsigned | NO | PRI | NULL | }
|
| value | text | YES | | NULL | // przykładowy kontroler wykorzystujących cache
| // klasa MessagesControler wyświetlająca wiadomości
| expires_at | datetime | YES | | NULL | // internetowego forum
|
+------------+------------------+------+-----+---------+------ class MessagesController extends AppController{
----------+ var $name = 'Messages';
var $helpers = array('Html','Time');
// przykładowy model danych obsługujący buforowanie stron var $layout = 'default';
// w bazie danych klasa Cache var $uses = array('Forum','Topic','Comment','Message',
'MyCache');
class MyCache extends AppModel
function view($id)
// jeżeli używamy PHP4, musimy zdefiniować zmienną {
// zawierającą nazwę klasy
var $name = 'MyCache'; // pobierz informacje o temacie dyskusji i powiązaną
// z nim listę komentarzy jeżeli temat nie istnieje,
// korzystamy z bazy danych  tabeli o nazwie cache // ponownie wyświetl listę działów
var $useTable =  cache ; $topic = $this->MyCache->find('topic'.$id);
if (empty($topic)) {
// metoda wyszukująca wartość skojarzoną z kluczem $topic = $this->Topic->find(array('Topic.id'=>
// i zwracająca dane jako zmienną PHP $id, 'Topic.topic_id'=>0));
if (! empty($topic)) {
function find($key)
{ // przechowuj przez tydzień
$rc = $this->query("select * from cache where key = $this->MyCache->store('topic'.$id, $topic, time()
'$key' and expires_at < NOW() limit 1"); + (7 * 24 * 60 * 60));
return unserialize($rc['cache'][0]['value']); }
} else
{
// metoda przechowująca w bazie danych klucz razem $this->redirect('/forums/index');
// z wartością exit();
}
function store($key, $value, $expires=null) }
{
// jutro // przekaż zmienną $topic do widoku
if (is_null($expires)) $expires = time()+(24 * 60 * 60));
$expires = date('Y-m-d H:i:s', $expires); $this->set('topic', $topic);
$value = serialize($value); }
return $this->query("replace cache set value = '$value',
$expires_at = '$expires' where key = '$key'); function remove($id)
} {
// metoda usuwająca przechowywane dane na podstawie klucza // usuń temat dyskusji wraz ze wszystkimi wiadomościami
// wyszukiwania // usuń zbędne pliki z cache
function delete($key) if ($this->Topic->drop($id, true)) $this->
{ MyCache->delete('topic'.$id);
return $this->query("delete * from cache where key = $this->redirect('/forums/index');
'$key'"); exit();
} }
05/2007 www.phpsolmag.org 53
Technika
Memcached ma jeszcze jedną zaletę  moż-
Listing 7. Wykorzystanie memcached z poziomu PHP
na go użyć jako mechanizm przechowują-
// utworzenie puli dostępnych serwerów memcached cy dane nie tylko na potrzeby buforowania
// każdy z nich będzie wykorzystywany proporcjonalnie całych stron (page cache). Możemy w cache
// do listy wag przekazanych jako prametr do metody Mamcache::addServer() umieszczać dowolne dane (wyniki obliczeń,
dynamicznie zmieniające się relacje między
$memcache = new Memcache; danymi) i na ich podstawie generować stro-
$memcache->addServer('memcache_host1', 11211, 50); ny WWW.
$memcache->addServer('memcache_host2', 11211, 25); Podobnie jak w przypadku page cache pro-
$memcache->addServer('memcache_host3', 11211, 25); blemem jest określenie, czy strony na których
$memcache = new Memcache; były prezentowane dane, które uległy mo-
$memcache->connect('localhost', 11211) or die ('Nie mogę się połączyć'); dyfikacji, znajdują się w cache. Memcached
umożliwia przechowywanie wyników obli-
if ($get_result = $memcache->get('key')) czeń, więc nie możemy polegać na prostej za-
{ leżności mówiącej, że w przypadku zmian w
modelu danych należy usunąć cache związa-
// jeżeli obiekt jest w cache, to skorzystaj z niego ny z widokiem prezentującym dane.Zamiast
tego można posłużyć się sztuczką polegają-
echo 'Dane z serwera:
'; cą na powiązaniu przechowywanych danych
echo $get_result->str_attr.'
'; przechowywanych w cache ze znacznikiem
echo $get_result->int_attr; sygnalizującym zmiany. Wystarczy, że utwo-
rzymy model danych, który będzie dostarczał
} informacje o stanie aplikacji, np. unikalny nu-
mer, niezmienny tak długo, jak długo nie na-
else stąpiły zmiany w bazie danych lub innych ob-
liczeniach.
{ Jeżeli tym numerem będziemy posługiwa-
li się przy obsłudze cache, to jego zmiana wy-
// w cache nie ma żądanych danych, zapisz dane musi ponowne przeliczenie zmienionych da-
nych. Jeżeli przestrzeń przeznaczona na bu-
$tmp_object = new stdClass; for będzie się zmniejszać, memcached auto-
$tmp_object->str_attr = 'test'; matycznie usunie dane, które przez określo-
$tmp_object->int_attr = time(); ny czas nie były aktywne.
$memcache->set('key', $tmp_object, false, 10) or die ( Rozwiązanie takie sprawdzi się przede
'Nie udało się zapisać elementu'); wszystkim przy skomplikowanych stronach
echo 'Zapisane dane zostaną usunięte po 10 sekundach
'; WWW opartych o przechowywane w cache
echo 'Odśwież stronę, by zobaczyć dane zapisane na serwerze memcached'; dane pochodzące z czasochłonnych obliczeń.
Koszt zaangażowania zasobów serwera w wy-
} krycie zmian w stanie aplikacji będzie wów-
czas zrównoważony przez oszczędności wy-
nikające z braku potrzeby wykonywania cza-
ra mechanizmami zapisu i odczytu danych odłączać) bez konieczności przerywania dzia- sochłonnej generacji strony.
(zobacz ramka QUERY-CACHE). Oczywi- łania serwisu (obsługa memcached zostanie
ście istnieje możliwość skalowania takiego włączona do CakePHP począwszy od wer- Podsumowanie
rozwiązania, jednak nie jest ono proste po- sji 1.2.xx). Mechanizm page cache w CakePHP w połą-
nieważ wymaga żmudnej konfiguracji (repli- Typowa sesja połączenia z memcached z po- czeniu z umiejętnym wykorzystaniem cache
kacja baz danych) i nie jest standardowo ob- ziomu PHP została przedstawiona na Listin- przeglądarki internetowej może zredukować
sługiwane przez CakePHP 1.1.xx. Przykłado- gu 7. W pierwszej kolejności następuje zdefi- opóznienia w dostarczaniu danych do użyt-
wy model danych obsługujący przechowywa- niowanie puli dostępnych serwerów pracują- kownika oraz zmniejszyć obciążenie serwera
nie cache w bazie danych został przedstawio- cych pod kontrolą memcached. Każdy z nich WWW i bazy danych. Warto zwrócić szcze-
ny w Listingu 6. będzie wykorzystywany proporcjonalnie do gólną uwagę na technologię memcached, któ-
Najbardziej elastycznym sposobem prze- wagi określonej podczas inicjalizacji połącze- ra zapewnia szybki dostęp do danych zawar-
chowywania danych jest mechanizm mem- nia i w razie awarii zastąpiony przez kolejny tych w cache, jest elastyczna i skalowalna,
cached przechowujący dane w pamięci RAM serwer z listy. dzięki czemu może  rosnąć razem z naszym
serwera (zobacz ramka). W miarę, jak dane Każdy dostęp do danych poprzedzony jest serwisem.
będą zapełniały przydzieloną pamięć, system testem, czy informacje są dostępne w cache.
będzie automatycznie usuwał te, które były Tylko w przypadku negatywnym nastąpi ko-
najrzadziej używane (można też usuwać da- nieczność wykonania czasochłonnych obli-
ne za pomocą odpowiednich wywołań syste- czeń, po których wynik zostanie zapisany w
mowych). cache (kolejne zapytania będą więc korzysta- PIOTR GAPICSKI
Memcached został także wyposażony w ły z bufora). Memcached sam zatroszczy się o Autor w wolnych chwilach zajmuje się programo-
mechanizmy równoważące obciążenie, gdy usunięcie zbędnych (przestarzałych) danych waniem w różnych językach (głównie Rebol, Ruby,
wykorzystywanych jest kilka serwerów, któ- z pamięci  w naszym przykładzie po 10 se- PHP i AmigaE).
re można w prosty sposób przyłączać (lub kundach. Kontakt z autorem: narg@polbox.com
54 05/2007


Wyszukiwarka

Podobne podstrony:
PHP Tworzenie stron WWW Szybki start phpszs
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie czwarte phmsv4
PHP i MySQL Tworzenie stron WWW VP Wyd3
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty phms2v
model ekonometryczny zatrudnienie (13 stron)
Logistyka (13 stron)
php 2
Biblioteka PHP Wysyłanie pliku na serwer
logistyka opakowania i znakowanie towarow (5 stron)

więcej podobnych podstron