Nette\Caching a expire
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Foowie
- Člen | 269
Lze nějak docílit toho, že při znovuzápisu do cache nezměním původní
expire time?
Něco ve stylu:
<?php
$options = array(
Cache::EXPIRE => 3600
NEJAKY_FLAG => true
);
$cache = Environment::getCache("MujCache");
$data = ...;
$cache->save("klic", $data, $options); // Pokud tento klíč již existuje, nezmění se jeho expiration time
?>
Editoval Foowie (14. 8. 2009 13:08)
- kravčo
- Člen | 721
Priamo Nette\Caching\Cache
takýto flag nemá, no túto
funkcionalitu nie je ťažké pridať… a možno sa nakoniec objaví
i v Nette…
class PreservingFileStorage extends FileStorage
{
public function write($key, $data, array $dp)
{
if (!empty($dp['preserve'])) {
if (!isset($dp[Cache::EXPIRE])) {
throw new InvalidArgumentException('While preserving cache expiration, Cache::EXPIRE must be set for case, when there is nothing to preserve.');
}
$meta = $this->readMeta($this->getCacheFile($key), LOCK_SH);
if ($meta) {
fclose($meta[self::HANDLE]);
if (isset($meta[self::META_EXPIRE])) {
$dp[Cache::EXPIRE] = $meta[self::META_EXPIRE];
}
}
}
parent::write($key, $data, $dp);
}
}
Použitie:
$storage = new PreservingFileStorage(dirname(__FILE__) .'/temp');
$cache = new Cache($storage, 'Test.Expiration.Preserving');
$cache->save($key, $data, array(
Cache::EXPIRE => Tools::HOUR,
'preserve' => TRUE,
));
Akurát mi zostáva záhadou, na čo je takéto nastavenie dobré…