Home  PHP Projekte  PHP Schulung  Informationsquellen  Geschichte  Core PHP  Fortgeschrittenes PHP  Templates  Cache-Technologien  Was cachen?  Wo cachen?  Probleme  Ersetzungsstrategien  Aktualität  on-demand Test  Abstrakte Funktion  Trigger  Speichermedien  Assembly  Lebensretter  OOH Forms  Technik der Site  Büchertipps  Fotografie  Airbrush  Kontakt  Stuff 
|
Cache als Abstrakte Funktion
Jeder Eintrag im Cache kann über eine beliebige Anzahl individueller Regeln
zur Überprüfung seiner Aktualität verfügen. Diese Eigenschaft
verbietet eine API wie im vorherigen Beispiel bei
dem mit der Methode $cache->modtime() ausschließlich
der Wert genau eines Unix-Timestamps überprüft werden kann.
Da nicht für jede denkbare Regel eine API-Funktion bereitgestellt
werden kann, wird eine Funktion mit
variabler Zahl von Argumenten verwendet, die eine Checksumme
zurückliefert. Die Funktion garantiert, daß sie für
jede Kombinationen von Argumenten eine andere Checksumme liefert.
Der einfachen Implementation halber, wird eine Hashfunktion
verwendet, die Kollisionen nicht ausschließt aber unwahrscheinlich
werden läßt.
| Checksumme für Aktualitätstests |
Top |
|
<?php
function cache_checksum() {
return md5(serialize(func_get_args()));
} // end func cache_checksum
?>
|
Mit dieser Funktion wird die API bereits vereinfacht.
Noch kompakter wird es, wenn wie beim PEAR-Datencache auch
der Klartext-Handle für den Cache-Eintrag mit einbezogen
wird und der Rückgabewert als Eintrags-ID verwendet wird.
| ID-Generierung ähnlich dem PEAR-Cache |
Top |
|
<?php
function cache_generateID() {
return md5(serialze(func_get_args()));
} // end func cache_generateID
$id = cache_generateID('func_1', 3, 'Ulf', filemtime('func1.php'));
if ($daten = cache_get($id)) {
// Cache-Hit
print $daten;
} else {
// Cache-Miss
include_once('func1.php');
$daten = func1(3, 'Ulf');
print $daten;
cache_save($id, $daten);
}
?>
|
Mit dem letzten Listing wird der Vergleich mit
einer abstrakten Funktion verständlich. Die von
uns verwendete abstrakte Funktion hat die Form:
cache(arg1 [, arg2...]).
< ^ >
|