Cache se dle tagů neinvaliduje

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

Ahoj,

narazil jsem na problém při invalidaci cache podle tagů.

Když v cleanu použiju Cache::ALL => TRUE, tak se invaliduje, ale to samozřejmě nechci.

Pro testování jsem si udělal následující úsek kódu, dle kterého by se měla vždy nově vytvořit cache. Ale nestane se tak, stále mám data v cache.

Dělám něco špatně?

<?php
	$this->cache->clean([
		Cache::TAGS => ['Admin.Channels']
	]);

	$data = $this->cache->load('Admin.Channels.getChannels', function() use ($my) {
		return $this->getChannelsData($my);

	}, [
		Cache::EXPIRE => '+ 20 minutes',
		Cache::SLIDING => TRUE,
		Cache::TAGS => ['Admin.Channels']
	]);
?>

Díky.

Editoval wise (31. 10. 2013 17:02)

wise
Člen | 161
+
0
-

Je tu někdo, komu fungují tagy? Může mi poslat fungující příklad?

jiri.pudil
Nette Blogger | 1032
+
0
-

Podívej se do API docky, jaké parametry přijímá metoda load(). Já tam žádný třetí nevidím.

leninzprahy
Člen | 150
+
0
-

Přesně tak, funkce load() třetí parametr nemá.

Řešením je

$data = $this->cache->load('Admin.Channels.getChannels', function(& $dp) use ($my) {
	$dp = [
		Cache::EXPIRE => '+ 20 minutes',
		Cache::SLIDING => TRUE,
		Cache::TAGS => ['Admin.Channels']
	];

	return $this->getChannelsData($my);
});

Třetí parametr jsem tam chtěl, viz pull request, ale prý je stávající řešení lepší.

wise
Člen | 161
+
0
-

Díky za odpověďi, taky by se mi tam ten třetí parametr líbil :)