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 Web Services nur noch mit Signatur Kaum schreibt man mal ein mehrteiliges Tutorial, schon ändert Amazon mal wieder was und nichts stimmt mehr :) Ich könnte jetzt ziemlich fluchen, bring...
Chatbots in PHP mit BotMan Die größte Sau die in 2017 bisher durchs Dorf getrieben wird, ist der Chatbot. Ein zugegeben sehr komische Entwicklung denn die Bots gibt es schon ewi...
Bessere Fehlermeldungen mit PHP Error PHP Fehlermeldungen tauchen an den unmöglichsten Stellen im Design auf, sind in keinster Weise irgendwie formatiert und vor allem muss es nicht unbedi...
Eigener OAuth-Server in PHP Aufgrund des gestrigen Artikels über Instagram und OAuth bin ich schnell auf die Idee gekommen das es ja Quatsch wäre für eigene APIs zukünftig kein O...

Schreibe einen Kommentar