Nastavení expirace cache při použití $cache->load a closure
- leninzprahy
- Člen | 150
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?
- leninzprahy
- Člen | 150
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…
- leninzprahy
- Člen | 150
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
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)