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

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

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é…

Foowie
Člen | 269
+
0
-

Supr, díky =)

Nooo cachuju si user-friendly url a jednou denně je chci komplet načíst znovu.