Jak je moc potrebne vymazavani cache?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ja
Člen | 260
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.

related

Ja
Člen | 260
+
0
-

dakujem pekne za osvetleni