AbstractCacheBuilder

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Die AbstractCache-Klasse ist im WCF die Mutterklasse aller Cache Dateien.

    Erklärung


    Die AbstractCache-Klasse ist im WCF 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.

    Die AbstractCache auf GitHub


    https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/form/AbstractForm.class.php

    Verfügbare Variabeln und Funktionen


    $maxLifetime


    Die Variabel $maxLifetime gibt die Zeit zwischen der Cache Erstellung und einer automatischen Erneuerung des Caches in Sekunden an.

    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.

    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.

    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.

    Arbeiten mit einem Cache


    Abrufen der Daten


    Daten kann man mittels folgenden Codefragment abrufen

    PHP-Quellcode

    1. NameDesCacheBuilder::getInstance()->getData();

    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.

    PHP-Quellcode

    1. NameDesCacheBuilder::getInstance()->getData(array('fooID' => $this->fooID));
    Mit diesem Beispiel erhaltet ihr alle Daten zurück, die zu der Variabel $this->fooID passen.


    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.

    PHP-Quellcode

    1. NameDesCacheBuilder::getInstance()->reset();
    Möchte man wiederum nur die Daten anhand des Parameters $parameters zurücksetzen, sähe der Code wie folgt aus:

    PHP-Quellcode

    1. NameDesCacheBuilder::getInstance()->reset(array('fooID' => $this->fooID));

    Komplettes Beispiel eines Caches



    PHP-Quellcode

    1. <?php
    2. namespace ea\system\cache\builder;
    3. use wcf\system\cache\builder\AbstractCacheBuilder;
    4. use wcf\system\WCF;
    5. class ExampleCacheBuilder extends AbstractCacheBuilder {
    6. protected $maxLifetime = 15; // Nach 15 Sekunden wir der Cache erneuert
    7. /**
    8. * @inheritDoc
    9. */
    10. protected function rebuild(array $parameters) {
    11. $data = [];
    12. // amount of foos
    13. $sql = "SELECT COUNT(*) AS foo
    14. FROM ea".WCF_N."_bar";
    15. $statement = WCF::getDB()->prepareStatement($sql);
    16. $statement->execute();
    17. $data['foos'] = $statement->fetchColumn();
    18. return $data;
    19. }
    20. }
    Alles anzeigen


    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 Eventlistener immer im Pfad ea/lib/system/cache/builder/ abgelegt werden.

    21.173 mal gelesen