Nette cache - nefunguje dle návodu

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

Ahoj,
vzhledem k db dotazu, který zpravidla trvá sám o sobě 600ms jsem se rozhodl použít cache. Nicméně informace o cache v Nette mi přijdou těžko dohledatelné, nebo i matoucí. Nyní mám následující kód, který pravděpodobně do cache neukládá:
$cacheStorage je instancí \Nette\Caching\IStorage

<?php
...
$param=$this->request->getParameters();
$vl=$this->cacheStorage->read($param);
        if(!$vl){
            $vl=$this->inzeratyModel->countVlastnosti();
            $this->cacheStorage->write($param, $vl,array(
    'Cache::EXPIRE' => '20 minutes'));
        }
...
?>

Rád bych uložil v závislosti na všech parametrech adresy (proměnlivé pole plné dalších polí – každá vlastnost může mít více hodnot a podle těch se následně kombinuje a vybírá) a zároveň na 20 minut. Nicméně v Tracy se mi stále zobrazuje ten problematický dotaz, z toho předpokládám, že se stále provádí a nevím proč.

Dále mi přijde, že v dokumentaci nette v 2.3 je chyba, na https://doc.nette.org/cs/caching se píše o metodách $cache->save() a $cache->load();, které však podle mého neexistují – místo toho mi přijdou vhodné funkce read() a write(). Nicméně dokumentace je tak pěkně napsaná a já jsem začátečník, že si nejsem jist, zda jsem nepochopil něco špatně já?

Nějaké nápady, proč mi to takhle neukládá? Děkuji…

Nějaké nápady, co dělám špatně?

Editoval argosovo (7. 10. 2015 14:27)

nightfish
Člen | 519
+
+1
-

Ahoj,

ve skutečnosti nechceš přistupovat přímo k IStorage, nýbrž k instanci Nette\Caching\Cache, která má IStorage jako parametr konstruktoru. IStorage je nízkoúrovňové úložiště, Cache je nadstavba nad IStorage, která ti umožnuje používat právě metody save() a load().

Přečti si kdyžtak ještě jednou tu dokumentaci, je to tam obojí popsané (jak úložiště, tak samotná cache).

Michal Hlávka
Člen | 190
+
0
-

Použij \Nette\Caching\Cache a zkus metody load místo read a save místo write.

Editoval emptywall (7. 10. 2015 14:36)

Blujacker
Člen | 89
+
0
-

Ahoj,

podle me bys mel pouzivat \Nette\Caching\Cache (https://api.nette.org/…g/Cache.html) a ne Storage, Storage je na ukladani informaci do nejake pameti, souboru, memchage, …

V config.neon si to muzes zapsat napriklad takto:

services:
	cacheStorage:
        class: Nette\Caching\Storages\FileStorage("%tempDir%/cache")
    cache:
        class: \Nette\Caching\Cache(@cacheStorage, "API")

a pak vyzadovat slubu

public function __construct(\Nette\Caching\Cache $cache){
    $this->cache = $cache;
}

a $this->cache jiz bude mit metody save a load.

argosovo
Člen | 54
+
0
-

Děkuji mnohokrát, to bude ono…
Jak jsem četl spoustu diskuzí o cache, tak jsem to asi nějak pomíchal dohromady, děkuji všem…