1 Erklärung
Die AbstractCache-Klasse ist im WSC die Mutterklasse aller Cache Dateien. Ein Cache wird immer dann angelegt, wenn sich Daten selten ändern, aber oft ausgelesen werden müssen. Um so z.B. die Datenbankabfragen zu minimieren, werden die Daten aus der Datenbank im Cache gespeichert, so dass hierauf sehr performant zugegriffen werden kann. Wie alle PHP-Dateien muss auch eine Ableitung der AbstractCache-Klasse mittels des files-PiP installiert werden. Alle Cache-Dateien befinden sich im Ordner Endanwendung/lib/system/cache/builder.
2 Die AbstractCache auf GitHub
https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/form/AbstractForm.class.php
3 Verfügbare Variabeln und Funktionen
3.1 $maxLifetime
Die Variabel $maxLifetime gibt die Zeit zwischen der Cache Erstellung und einer automatischen Erneuerung des Caches in Sekunden an.
3.2 rebuild()
Die Funktion rebuild() wird immer dann aufgerufen, wenn der Cache nicht existiert bzw. nicht mehr existiert und die Daten neu aus der Quelle eingelesen werden müssen.
3.3 getMaxLifetime()
Normalerweise muss man diese Funktion nicht überschreiben. Diese gibt lediglich eine maximale Lebensdauer des Caches zurück. Standartmäßig ist $this->maxLifetime = 0, was diese Funktion fast überflüssig macht, da somit keine automatische Leerung des Caches stattfindet.
3.4 reset()
Möchte man neben der normalen Leerung des Caches noch weitere Aufgaben erledigen, stünde einem diese Funktion zur Verfügung. Ebenso wie die Funktion getMaxLifeTime() wird auch diese Funktion fast nie gebraucht.
4 Arbeiten mit einem Cache
4.1 Abrufen der Daten
Daten kann man mittels folgenden Codefragment abrufen
Hat man allerdings größere Datenmengen, die z.B. zu einer ID passend sind, kann man an dieser Stelle bereits mit dem Parameter $parameters arbeiten, welcher von Typ Array ist.
Mit diesem Beispiel erhaltet ihr alle Daten zurück, die zu der Variabel $this->fooID passen.
4.2 Zurücksetzen der Daten
Sobald man Daten verändert hat, neue Datensätze hinzugefügt hat, sollte der Cache auf den neuesten Stand gebracht werden. Damit nicht weiterhin falsche Daten an den Clienten gesand werden, muss der Cache zurückgesetzt bzw. geleert werden.
Möchte man wiederum nur die Daten anhand des Parameters $parameters zurücksetzen, sähe der Code wie folgt aus:
5 Komplettes Beispiel eines Caches
PHP
<?php
namespace ea\system\cache\builder;
use wcf\system\cache\builder\AbstractCacheBuilder;
use wcf\system\WCF;
class ExampleCacheBuilder extends AbstractCacheBuilder {
protected $maxLifetime = 15; // Nach 15 Sekunden wir der Cache erneuert
/**
* @inheritDoc
*/
protected function rebuild(array $parameters) {
$data = [];
// amount of foos
$sql = "SELECT COUNT(*) AS foo
FROM ea".WCF_N."_bar";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute();
$data['foos'] = $statement->fetchColumn();
return $data;
}
}
Display More
6 Gut zu wissen
- Der Klassenname/Dateiname sollte immer mit CacheBuilder aufhören. Beispiele : ExampleCacheBuilder, TestCacheBuilder, CategoryCacheBuilder etc.
- Auch wenn es anders möglich ist, sollte der Cache Dateien immer im Pfad ea/lib/system/cache/builder/ abgelegt werden.