Cache

Für die Zwischenspeicherung von Objekten kann der CacheManager verwendet werden. Dieser ist eine Erweiterung der ObjectStorage Klasse und fügt hauptsäachlich die Methode CacheManager->retrieveOrRefresh() hinzu. Diese Methode lädt ein Objekt aus dem im CacheManager definiertem Objektspeicher und verwendet im Anschluß die Meßpunkte um die Gültigkeit des Objektes zu bestimmen.

Ist das Objekt gütltig, so wird das aus dem Speicher geladene Objekt zurückgegeben, ansonsten wird das Objekt für ungültig erklärt und die Hook-Methode CacheManager->refresh() aufgerufen.

Im folgenden Beispiel wird ein Objekt MyObject erstellt. Jedesmal wenn sich die temporäre Datei ändert, wird das Objekt für ungültig erklärt und die Methode MyObject->refresh() aufgerufen.

/**
 * Beispiel-Objekt
 */
class MyObject extends \Alvine\Cache\CacheObject {

    public function __construct(\Alvine\IO\File\File $file) {
        parent::__construct();
        $this->examiner->append(new \Alvine\Cache\Probe\FileProbe($file));

        $this->refresh=function() {
            echo "refresh wurde aufgerufen\n";
        };
    }

}

$cacheManager=\Alvine\Cache\CacheManager::getDefaultCacheManager();

/** Temporäre Datei anlegen */
$file=\Alvine\IO\File\TemporaryFile::createUndefined();
$file->dontDeleteOnExit();

/** Zu cachende Objekt anlegen */
$obj=new MyObject(1, $file);


$cacheManager->retrieveOrRefresh($obj);
// -> refresh wurde aufgerufen
$cacheManager->retrieveOrRefresh($obj);
// Keine Ausgabe 
$cacheManager->retrieveOrRefresh($obj);
// Keine Ausgabe 
$cacheManager->retrieveOrRefresh($obj);
// Keine Ausgabe 
// Probe-Datei löschen
\unlink((string) $file);

/** Dadurch ist das Objekt nicht mehr aktuell und muss neu erstellt werden */
$cacheManager->retrieveOrRefresh($obj);
// -> refresh wurde aufgerufen

Weitere Proben erlauben es den Inhalt einer Datei FileContentProbe oder den Inhalt eines Verzeichnisses DirectoryProbe rekursiv zu überwachen.