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.