Prosty cache zapytań
Pisałem już wcześniej trochę o mechanizmie cache Cake’a. Dostrzegam coraz więcej zalet z jego wykorzystania. Chciałem się podzielić prostą funkcją, która może znacznie wam ułatwić pracę.
Często wykonywane zapytania jak np. pobranie kilku najpopularniejszych ofert, czy najczęściej oglądanych nie powinny być za każdym razem kierowane do bazy. Oczywiście najprościej jest wykonać raz zapytanie i zapisać do cache na określony czas. Jest to dość proste, ale zawsze można to uprościć.
Poniższą funkcję należy umieścić w AppModel’u. Używa się jej jak zwykłej funkcji find w modelach. Różnica polega na tym, że pobrane dane zapisywane są automatycznie w cache i przy następnym ich odczycie, pobierane są stamtąd o ile nie wygasł ich czas ważności. Użycie tej funkcji jest o tyle wygodne, że aby użyć jej w istniejącej aplikacji, wystarczy w odpowiednich miejscach zamienić wywołanie funkcji find na cacheFind.
Dane z modelu zapisywane są w cache pod kluczem składającym się z nazwy modelu i typu zapytania, czyli: first, list lub all. Jeśli dla tego samego modelu zostało wywołanych kilka różnych zapytań, wyniki połączone zostają w tablicy pod tym samym kluczem.
function cacheFind($type, $other = array())
{
if (Configure::read('Cache.disable')==true)
return $this->find($type, $other);
else
{
$data=Cache::read($this->name.'.'.$type);
$other=serialize($other);
if (!isset($data[$other]))
{
$newData=$this->find($type, $other);
$data[$other]=$newData;
Cache::write($this->name.'.'.$type, $data);
}
return $data[$other];
}
}
wtorek, 23 Luty 2010


Facebook
GoldenLine
LinkedIn