Tutorial Amazon Web Services mit PHP – III – Caching von Funktionsaufrufen

Im vorherigen Teil haben wir eine XML von den AWS mit cURL geladen. Aber Was heißt eigentlich Funktionscaching, und wieso brauchen wir das? Ganz einfach: Eine Funktion wird aufgerufen, führt Berechnungen durch und gibt das Ergebnis zurück. Die Berechnungen können sehr einfach sein, aber auch sehr viel kosten. Würden wir zum Beispiel den Download des XML von den Amazon Web Services in eine Funktion verpacken und bei jedem Aufruf das XML neu laden, würde das sehr teuer werden. Stattdessen macht es mehr Sinn, das XML zu cachen. Es gibt nun viele verschiedene Möglichkeiten das XML zu cachen, und die wohl einfachste ist es, einen allgemeinen Ansatz zu verwenden, der ganze Funktionsaufrufe cached. Dies können wir zum Beispiel auch für Datenbankaufrufe verwenden.

Hierbei liegt die Tücke allerdings im Detail, denn ein Aufruf der eigentlichen Funktion mit verschiedenen Parametern wird in der Regel auch verschiedene Antworten liefern. Es gilt also nicht die Funktion global zu cachen, sondern auch die Parameter zu berücksichtigen. Gleiche Parameter liefern gleiche Ergebnisse, ändern sich die Parameter muss zum Beispiel in unserem Fall die XML neu geladen werden.

Wir könnten uns nun den Kopf zermartern über eine eigene Caching-Funktion, aber wieso soll man das Rad neu erfinden? Ich nehme in der Regel Cache_Lite aus der Pear (direkter Download). Cache_Lite ist ein Programmpaket das genau das macht was wir wollen, und für uns erstmal eine Blackbox darstellt: Es ist egal was es macht, Hauptsache es funktioniert :)

Voraussetzung ist natürlich, dass wir eine Funktion hätten, die eine XML bei den AWS abfragt, diese könnte zum Beispiel wie folgt aussehen:

function aws_load_xml( $url ) {
	$ch = curl_init();
	curl_setopt( $ch, CURLOPT_URL, $url );
	curl_setopt( $ch, CURLOPT_HEADER, 0 );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
	$answer = curl_exec( $ch );
	curl_close( $ch );
	return $answer;
}

Den Funktionsaufruf müssten wir nun cachen, dies geschieht mich Cache_Lite wie folgt:

/ Include der Cache_Lite-Klasse
require_once('Cache/Lite/Function.php');
 
// Konfigurieren von Cache_Lite
$options = array(
		// Cache-Verzeichnis
    'cacheDir' => '/tmp/',
    // Lebenszeit eines gecachten Funktionsaufrufs
    'lifeTime' => 10
);
 
// Cache_Lite initialiseren
$cache = new Cache_Lite_Function($options);
 
// Eigene Funktion aufrufen
$cache->call('aws_load_xml', "http://ecs.amazonaws.de/onca/xml?Service=AWSECommerceService");

Das war es schon ;) Den Rest der Arbeit übernimmt Cache_Lite. Das Beispiel ist natürlich recht einfach gestrickt, es verfügt über keine Fehlerbehandlung. Aber um eine Garbage Collection brauchen wir uns zumindest keine Sorgen machen, das übernimmt Cache_Lite selbstständig. Das Paket ist natürlich nicht nur für unseren XML-Abruf gut, sondern es lässt sich jede beliebige Funktion damit cachen. Es ist zum Beispiel bei aufwendigen Datenbankabfragen von Interesse.

Nachdem wir nun wissen, wie wir ein XML laden und dieses Cachen sollten wir uns als Nächstes um die Ausgabe der Daten sorgen machen. Und hier gilt stets die Prämisse: Content und Design werden strikt voneinander getrennt, aber dazu mehr im nächsten Teil des Kurses.

Ähnliche Beiträge

Amazon Product Advertising API – Änderung de... Da mich Amazon inzwischen im spamverdächtigen Bereich mit E-Mail penetriert hier noch mal der Hinweis das ihr die Authentifizierung in euren Altanwend...
Instagram API mit PHP Ich kann mich nicht entscheiden, ob Instagram clever oder dumm ist. Auf der einen Seite kommt man mit den Apps für mobile Geräte ganz schön weit, auf ...
Tutorial Amazon Web Services mit PHP – II &#... Im vorherigen Teil haben wir zumindest schon einmal einen API-Key und eine Partner-ID besorgt, jetzt geht es ans Eingemachte. AWS sind ein Service, de...
Image Data URIs mit PHP Image Data URIs sind für manche Anwendungen eine feine Sache. Wozu braucht man die kleinen Helfer? Einfach ausgedrückt: direktes Einbetten von Bildern...

Schreibe einen Kommentar