Jak je moc potrebne vymazavani cache?
- Ja
- Člen | 260
Noob alert:
Ahoj,
prochazim si kody IIS od Davida Sabaty a pouzivam to jako svuj ucebni material.
Narazil jsem na cast kodu v metode:
<?php
public function save($id, $data) {
if ($id === NULL)
$id = $this->add();
try {
\dibi::query("UPDATE users_roles SET", $data, "WHERE id=%i", $id);
} catch (DibiDriverException $e) {
return FALSE;
}
// clean the cache
$this->cache->offsetUnset('roleNames');
$tmp = \Nette\Environment::getCache(\AclModel::CACHE_KEY);
$tmp->offsetUnset('roles');
$tmp->offsetUnset('rulesid_' . $id);
$tmp->offsetUnset('rules');
return TRUE;
}
?>
Konkretne mi jde o cisteni cache:
<?php
// clean the cache
$this->cache->offsetUnset('roleNames');
$tmp = \Nette\Environment::getCache(\AclModel::CACHE_KEY);
$tmp->offsetUnset('roles');
$tmp->offsetUnset('rulesid_' . $id);
$tmp->offsetUnset('rules');
?>
Z jakeho duvodu je v tuto chvili treba vycistit cache? Co se muze stat? Nebo to jen patri k preciznosti dobreho programatora?
- kravčo
- Člen | 721
Z tvojho príspevku nie je jasné, ako sa keš využíva… Ale vo všeobecnosti, akonáhle využívaš keš na ukladanie nejakých výsledkov/výpočtov z nejakého zdroja dát (MySQL, súbory, …) a chceš aby boli zakaždým aktuálne, pri akejkoľvek ich zmene musích keš vymazať, aby sa vygenerovala z nových dát.
V tomto prípade zrejme ide o kešovanie výsledku z DB, čiže napr. po zmenení role treba túto informáciu updatnuť aj v keši. Robí sa to zmazaním, pri požiadavke na role by sa mala keš znovuvybudovať sama.
Sú prípady, keď sa toto dosiahnuť nedá, alebo sa to neoplatí (napr. kešovanie obrázkov z gravatar.com), kde nemáš kontrolu nad zmenami a samotné zistenie, či sa obrázok zmenil je takmer tak náročné ako jeho získanie. V tomto prípade to však nespôsobuje vážny problém…
- Ja
- Člen | 260
Diky za vycerpavajici odpoved.
Dovol mi jeste jednu noob Q, – ja nikdy cache cilene nevyuzival, ale cachuje se kvuli tomu, abys ulehcil trafficu? Ze kdyz uz mas nacachovany nektery data, nemusis znova sahat do databaze a zbytecne ji zatezovat, kdyz si to muzes vytahnout z cache?
A vyuziva se takle cache casto? Vyplati se to, nebo to „odlehceni“ je vicemene zanedbatelny?
- kravčo
- Člen | 721
Keš sa využíva všeobecne na uľavenie záťaži (nielen prenosovej, ale aj výpočtovej, atď…).
Veľmi záleží na konkrétnom prípade. Z mojich meraní kešovať len výsledky z DB nemá zmysel (ak máme db na rovnakej mašine a nerobíme supermeganáročné dopyty). Zmysel to určite má ak sa spojí viacero operácií, ktoré po sebe bežne nasledujú, napr.: dopyt na databázu + formátovanie textu + vykreslenie šablóny, a kešuje sa ich spoločný výsledok. To zrýchlenie už takmer iste prinesie.