Nastavení expirace cache při použití $cache->load a closure

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

Ahoj,

nastavuji cache podle dokumentace

$value = $cache->load($key, function() {
    return ...;
});

a chci se zeptat, jak u tohoto zápisu nastavit expiraci?
Zkoušel jsem to přidat jako poslední parametr

$value = $cache->load($key, function() {
    return ...;
}, array(Cache::EXPIRE => '+ 10 seconds'));

ale zdá se že to nefunguje, nějaký nápad?

Jan Endel
Člen | 1016
+
0
-

Expirace lze nastavovat pouze při ukládání informace, co hledáš je možná Cache::SLIDING?

leninzprahy
Člen | 150
+
0
-

Díky, ale Cache::SLIDING nehledám :)

V dokumentaci je napsáno

Funkce load má jako druhý parametr callable $fallback. Který využije když daná cache neexistuje.

což chápu tak, že pokud daná cache neexistuje, naplní se hodnotou kterou vrátí funkce (a opravdu to tak funguje).

Jde vlastně o zkrácený zápis

$value = $cache->load($key);
if ($value === NULL) {
	$function = function() {
    		return ...;
	};
	$value = $function();
	$cache->save($key, $value, array(Cache::EXPIRE => '+ 10 seconds'));
}

tady je mi jasné jak tu expiraci nastavit, ale zajímá mě, jestli to jde i u toho zkráceného zápisu…

Caine
Člen | 216
+
0
-

Když se podíváš do zdrojáků, tak zjistíš, že tam momentálně nijak nejde předat parametry pro invalidaci cache. Jedině si to tam sám dopsat;)

leninzprahy
Člen | 150
+
0
-

Caine napsal(a):

Když se podíváš do zdrojáků, tak zjistíš, že tam momentálně nijak nejde předat parametry pro invalidaci cache. Jedině si to tam sám dopsat;)

Díky, už to tam vidím :-)

Úprava není složitá, ale nevím zda je koncepční, na první pohled mi to přijde v pořádku.
Pokud to někomu přijde taky tak a má účet na gitHub.com může požádat o pull request ;-)

	/**
	 * Reads the specified item from the cache or generate it.
	 * @param  mixed key
	 * @param  callable
	 * @param  array  dependencies @see save()
	 * @return mixed|NULL
	 */
	public function load($key, $fallback = NULL, array $dp = NULL)
	{
		$data = $this->storage->read($this->generateKey($key));
		if ($data === NULL && $fallback) {
			return $this->save($key, callback($fallback), $dp);
		}
		return $data;
	}
Caine
Člen | 216
+
+2
-

Ackoliv to tu uz neni aktualni, zjistil jsem z testu, ze se ty parametry daj predavat parametrem ty fallback funkce (WTF). By mne zajimalo, kdo takovyhle chovani vymyslel a jeste ani v dokumentaci nepopsal?

// Writing cache using Closure...
$res = $cache->load($key, function(& $dp) use ($value) {
	$dp = array(
		Cache::EXPIRATION => time() + 2,
	);
	return $value;
});

Editoval Caine (7. 10. 2012 23:27)