Nette cache - nefunguje dle návodu
- argosovo
- Člen | 54
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
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
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
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.