public function filters(){
return array(
array(
'COutputCache',
'duration'=>100,
'varyByParam'=>array('styp', 'svalue'),
),
);
}
die Ladezeiten der Seiten werden nicht kleiner und ich kann auch nicht sehen wo die gecachten Dateien abgelegt werden?!!? Der Ordner ist ja runtime/cache/HASH().bin.
Kann ich den gecachten Dateien einen anderen Namen geben?
Mein Ziel ist es die Seiten der Methode actionPhrase zu cachen und das mit den Parametern sTyp und sValue.
Wie kann ich herausfinden ob eine Seite gecached wurde?
Ich habe den php-apc installiert. Würdet ihr mir zu was anderem raten?
Hab Seitencaching auch noch nicht verwendet und auf die Schnelle keine Zeit mir das näher anzusehen. Was mir aber gleich auffällt: Wieso glaubst du, dass die Cachedatein in runtime/cache/HASH().bin liegen? Du verwendest doch APC, die Cachedaten liegen also im Speicher. Bei APC ist ein kleines Script (meistens apc.php) dabei. Installier das mal irgendwo, dann kannst du wunderbar prüfen, was alles so im APC abgelegt wurde und wie dieser ausgelastet ist.
sorry, das waren wohl die Dateien von CFileCache die noch dadrinnen waren.
Weißt du denn wie ich den gecachten Sachen eigene Namen geben kann.
Mein Fall sieht so aus, das die Dateien locker einen Monat im Cache bleiben können. Ich will das sie nur gelöscht werden, wenn ich an den dynamischen Seiten was ändere. Dafür brauche ich aber den Namen von den DAteien
Die Dateinamen kriegst du gar nicht. COutputCache ist ja ein Filter, der von Controller-/Action-ID abhängen dürfte, nicht von einem Dateinamen.
Schau dir mal Dependencies näher an. Die sind dafür gedacht, bestimmte Sachen aus deinem Cache wieder rauszuschmeissen. Damit solltest du also was entsprechendes basteln können.
Du musst die Logik umkehren: D.h. statt die Seiten aus dem Cache zu löschen, wenn du sie updatest, prüfst du jedesmal, wenn die Seite aus dem Cache geladen werden soll mit Hilfe der Dependency ob die Seite noch gültig ist.
Mein Ansatz wäre:
Seite wird frisch aufgerufen - sie wird neu geladen und im Cache abgelegt
Seite wird erneut aufgerufen - Dependency schaut "irgendwo" nach, ob die gecachte Version ungültig geworden ist. Falls nicht, liefert die Dependency false zurück und löscht die Seiten-Id aus "irgendwo".
Seite wird geändert - jetzt schreibt man nach "irgendwo" die Seiten-Id, und signalisiert, dass diese Seite nicht mehr länger gültig ist, sollte sie gecacht sein
Das "irgendwo" könnte z.B. ein ganz einfaches Array sein, dass du z.B. unter dem Schlüssel "expiredpages" oder so ebenfalls im Cache ablegst.
So müsste das prinzipiell funktionieren. Details muss man natürlich noch erarbeiten. Wiegesagt, hab mir Dependencies so richtig auch noch nicht näher angesehn.
gelöst. Das Problem ist jedoch, dass diese Lösung um einiges langsamer ist, was ich sehr ärgerlich finde, da ich nun eine zusätzliche DB Abfrage machen muss. Ich suche nach wievor eine Lösung mit der ich gezielt Seiten aus dem Cache löschen kann. Wenn eine Seite gecached wird, dann wird ja ein Schlüssel erzeugt und dieser muss doch irgendwie zuberechnen sein?!
Das Ändern kann man mit der SQL-Depencency-Lösung soweit lösen, das man das Datum weit nach hinten stellt. duration überprüft bei jedem Seitenaufruf (naja-Lösung) ob die gecachte Seite noch aktuell ist.
Eine bessere Lösung wäre, wenn man nach dem Update den Cache aufrufen könnte und die Seite direkt gecached wird. Hier habe ich auch noch keine Lösung gefunden.
Ich bin der festen Überzeugung das das Caching von yii noch nicht ausgereift sind und noch einiges an Methoden fehlen. Selbst das agile Buch über yii behandelt das Caching mehr als stiefmütterlich!
Falls du neue Erkenntnisse findest dann bitte immer her damit ^^
Ist zwar ein alter Thread, aber hier gibts eine Variante, wie man ein rel. einfaches System bauen kann, um Seiten gezielt aus dem Cache zu entfernen, wenn man z.B. einen Artikel updated: