Zend_Cache Backends
Es gibt zwei Arten von Backends: Standard und erweiterte. Natürlich bieten erweiterte
Backends mehr Features.
Zend_Cache_Backend_File
Dieses (erweiterte) Backend speichert Cache Datensätze in Dateien (in einem gewählten
Verzeichnis).
Mögliche Optionen sind :
File Backend Optionen
Option |
Daten Typ |
Standardwert |
Beschreibung |
cache_dir |
String |
'/tmp/' |
Verzeichnis, in dem die Cache Dateien gespeichert werden
|
file_locking |
Boolean |
TRUE |
Ein- oder Ausschalten von file_locking: kann die Beschädigung des
Caches unter schlechten Bedingungen verhindern, aber es hilft nicht bei
Multithreaded Webservern oder bei NFS
Filesystemen...
|
read_control |
Boolean |
TRUE |
Ein- oder Ausschalten von read_control: eingeschaltet wird ein
Kontrollschlüssel im Cache File inkludiert und dieser Schlüssel wird mit
dem Schlüssel verglichen, der nach dem Lesen berechnet wird.
|
read_control_type |
String |
'crc32' |
Typ der Schreibkontrolle (nur wenn read_control eingeschaltet ist).
Mögliche Werte sind : 'md5' (bestes, aber am Langsamsten), 'crc32'
(etwas weniger sicher, aber schneller, beste Wahl), 'adler32' (neue
Wahl, schneller als crc32), 'strlen' um nur die Länge zu testen
(schnellstes).
|
hashed_directory_level |
Integer |
0 |
Level der gehashten Verzeichnis Struktur: 0 heißt "keine gehashte
Verzeichnis Strutur, 1 heißt "ein Level von Verzeichnissen", 2 heißt
"zwei Levels"... Diese Option kann den Cache nur dann schneller machen,
wenn viele Tausende Cache Dateien verwendet werden. Nur spezielle
Messungen können helfen, den perfekten Wert zu finden. Möglicherweise
ist 1 oder 2 ein guter Anfang.
|
hashed_directory_umask |
Integer |
0700 |
Umask für die gehashte Verzeichnis Struktur |
file_name_prefix |
String |
'zend_cache' |
Präfix für Cache Dateien; man muss mit dieser Option sehr vorsichtig
umgehen, weil ein zu generischer Wert in einem System Cache
Verzeichnis (wie /tmp) kann beim Löschen des
Caches zu großen Problemen führen.
|
cache_file_umask |
Integer |
0700 |
umask nach Cache Dateien |
metatadatas_array_max_size |
Integer |
100 |
Interne maximale Größe für das Metadaten Array (dieser Wert sollte
nicht geändert werden außer man weiß was man macht)
|
Zend_Cache_Backend_Sqlite
Dieses (erweiterte) Backend speichert die Cache Datensätze in einer SQLite Datenbank.
Mögliche Optionen sind :
Sqlite Backend Optionen
Option |
Daten Typ |
Standardwert |
Beschreibung |
cache_db_complete_path (mandatory) |
String |
NULL |
Der komplette Pfad (inklusive Dateiname) der SQLite Datenbank |
automatic_vacuum_factor |
Integer |
10 |
Deaktiviert oder stellt den automatischen Vakuumprozess ein.
Der automatische Vakuumprozess defragmentiert die Datenbankdatei (und
verkleinert sie) wenn clean() oder
delete() aufgerufen wird: 0 bedeutet kein
automatisches Vakuum; 1 bedeutet systematisches Vakuum (wenn die
delete() or clean()
Methoden aufgerufen werden; x (integer) > 1 => automatisches Vakuum
zufällig einmal pro x clean() oder
delete() Aufrufe.
|
Zend_Cache_Backend_Memcached
Dieses (erweiterte) Backend speichert Cache Datensätze in einem Memcached Server. » memcached ist ein hoch-performantes,
verteiltes Speicher Objekt Caching System. Um dieses Backend zu benutzen, wird ein
Memcached Dämon benötigt und » die
Memcached PECL Erweiterung.
Vorsicht: mit diesem Backend werden zur Zeit "Marker" nicht unterstützt genauso wie das
"doNotTestCacheValidity=true" Argument.
Mögliche Optionen sind :
Memcached Backend Optionen
Option |
Daten Typ |
Standardwert |
Beschreibung |
servers |
Array |
array(array('host' => 'localhost','port' => 11211,
'persistent' => true, 'weight' => 1, 'timeout' => 5,
'retry_interval' => 15, 'status' => true,
'failure_callback' => '' ))
|
Ein Array von Memcached Servern; jeder Memcached Server wird durch ein
assoziatives Array beschrieben : 'host' => (string) : Der Name des
Memcached Servers, 'port' => (int) : Der Port des Memcached Servers,
'persistent' => (bool) : Persistente Verbindungen für diesen Memcached
Server verwenden oder nicht 'weight' => (int) : Das Gewicht des
Memcached Servers, 'timeout' => (int) : Das Timeout des Memcached
Servers, 'retry_interval' => (int) : Das Wiederholungsintervall des
Memcached Servers, 'status' => (bool) : Der Status des Memcached
Servers, 'failure_callback' => (callback) : Der failure_callback des
Memcached Servers
|
compression |
Boolean |
FALSE |
TRUE wenn on-the-fly Kompression verwendet werden
soll
|
compatibility |
Boolean |
FALSE |
TRUE wenn man den Compatibility Modus mit alten
Memcache Servern oder Erweiterungen verwenden will
|
Zend_Cache_Backend_Apc
Dieses (erweiterte) Backend speichert Cache Datensätze im Shared Memory durch die
» APC (Alternativer
PHP Cache) Erweiterung (welche natürlich für die Verwendung dieses
Backends benötigt wird).
Vorsicht: mit diesem Backend werden "Marker" zur Zeit nicht unterstützt genauso wie das
"doNotTestCacheValidity=true" Argument.
Es gibt keine Optionen für dieses Backend.
Zend_Cache_Backend_Xcache
Dieses Backend speichert Cache Einträge im Shared Memory durch die
» XCache Erweiterung (welche natürlich
benötigt wird, damit dieses Backend verwendet werden kann).
Achtung: Bei diesem Backend werden "tags" aktuell nicht unterstützt sowie das
"doNotTestCacheValidity=true" Argument.
Mögliche Optionen sind:
Xcache backend options
Option |
Daten Typ |
Standardwert |
Beschreibung |
user |
String |
NULL |
xcache.admin.user, notwendig für die
clean() Methode
|
password |
String |
NULL |
xcache.admin.pass (in offener Form, nicht
MD5), notwendig für die
clean() Methode
|
Zend_Cache_Backend_TwoLevels
Dieses (erweiterte) Backend ist ein Hybrides. Es speichert Cache Einträge in zwei
anderen Backends: Ein schnelles (aber limitiertes) wie Apc, Memcache... und ein
"langsames" wie File, Sqlite...
Dieses Backend verwendet den Priority Parameter (der auf Frontend Level angegeben wird
wenn ein Eintrag gespeichert wird) und den verbleibenden Platz im schnellen Backend um
die Verwendung dieser zwei Backends zu optimieren.
Dieses Backend sollte mit Verwendung eines Word Separators -- '-', '.', ' ', oder '_' --
zwischen den Wörtern 'Two' und 'Levels' spezifiziert werden wenn die
Zend_Cache::factory() Methode verwendet wird:
$cache = Zend_Cache::factory('Core', 'Two Levels');
Vorhandene Optionen sind:
TwoLevels Backend Optionen
Option |
Datentyp |
Standardwert |
Beschreibung |
slow_backend |
String |
File |
Der "langsame" Backendname |
fast_backend |
String |
Apc |
Der "schnelle" Backendname |
slow_backend_options |
Array |
array() |
Die "langsamen" Backendoptionen |
fast_backend_options |
Array |
array() |
Die "schnellen" Backendoptionen |
slow_backend_custom_naming |
Boolean |
FALSE |
Wenn TRUE, wird das slow_backend Argument als
kompletter Klassenname verwendet; wenn FALSE,
wird das frontend Argument als Ende des
"Zend_Cache_Backend_[...]" Klassennamens
verwendet
|
fast_backend_custom_naming |
Boolean |
FALSE |
Wenn TRUE, wird das fast_backend Argument als
kompletter Klassenname verwendet; wenn FALSE,
wird das frontend Argument als Ende des
"Zend_Cache_Backend_[...]" Klassennamens
verwendet
|
slow_backend_autoload |
Boolean |
FALSE |
Wenn TRUE, wird kein require_once für das
langsame Backend verwendet (nur für eigene Backends nützlich)
|
fast_backend_autoload |
Boolean |
FALSE |
Wenn TRUE, wird kein require_once für das
schnelle Backend verwendet (nur für eigene Backends nützlich)
|
auto_refresh_fast_cache |
Boolean |
TRUE |
Wenn TRUE, wird der schnelle Cache automatisch
refresht wenn ein Cache Eintrag getroffen wird
|
stats_update_factor |
Integer |
10 |
Ausschalten / Feintunen der Berechnung des Füll-Prozentsatzes des
schnellen Backends (wenn ein Eintrag in den Cache gespeichert wird,
die Berechnung des Füll-Prozentsatzes des schnellen Backends zufällig
1 mal bei x Cache Schreibvorgängen)
|
Zend_Cache_Backend_ZendServer_Disk und Zend_Cache_Backend_ZendServer_ShMem
Diese Backends speichern Cacheeinträge indem Sie die Caching Funktionalitäten von » Zend
Server verwenden.
Achtung: mit diesen Backends werden für den Moment "Tags" nicht unterstützt, wegen dem
"doNotTestCacheValidity=true" Argument.
Diese Backends arbeiten nur in einer Zend Server Umgebung für Seiten die über
HTTP oder HTTPS angefragt wurden und nicht für
Kommandozeilen Ausführung.
Dieses Backend muß durch Verwendung des customBackendNaming
Parameter mit TRUE spezifiziert werden wenn die Methode
Zend_Cache::factory() verwendet wird:
$cache = Zend_Cache::factory('Core', 'Zend_Cache_Backend_ZendServer_Disk',
$frontendOptions, $backendOptions, false, true);
Es gibt keine Optionen für diese Backends.
Zend_Cache_Backend_Static
Dieses Backend arbeitet in Verbindung mit
Zend_Cache_Frontend_Capture (diese zwei müssen zusammen verwendet
werden) um die Ausgabe von Anfragen als statische Dateien zu speichern. Dies bedeutet
das die statischen Dateien bei weiteren Anfragen direkt serviert werden ohne dass
PHP oder sogar Zend Framework involviert sind.
Note:
Zend_Cache_Frontend_Capture arbeitet indem es eine Callback
Funktion registriert welche aufgerufen wird wenn der Ausgabebuffer den es verwendet
gelöscht wird. Damit das richtig funktioniert muss er der letzte Ausgabebuffer in
der Anfrage sein. Um dies zu garantieren muss der Ausgabebuffer
welcher vom Dispacher verwendet wird ausgeschaltet sein indem
Zend_Controller_Front's Methode
setParam() verwendet wird, zum Beispiel
$front->setParam('disableOutputBuffering', true); oder indem
"resources.frontcontroller.params.disableOutputBuffering = true" in der Bootstrap
Konfigurationsdatei (wir nehmen INI an) wenn
Zend_Application verwendet wird.
Der Vorteil dieses Caches besteht darin das eine starke Verbesserung des Durchsatzes
stattfindet weil statische Dateien zurückgegeben werden und keine weitere dynamische
Bearbeitung stattfindet. Natürlich gibt es auch einige Nachteile. Der einzige Weg um
dynamische Anfragen wieder zu haben besteht darin die gecachten Dateien von anderswo
in der Anwendung zu löschen (oder über einen Cronjob wenn das zeitlich abgestimmt werden
soll). Es ist auch auf Single-Server Anwendungen begrenzt begrenzt bei denen nur ein
Dateisystem verwendet wird. Trotzdem kann es eine große Bedeutung haben wenn man mehr
Geschwindigkeit haben will ohne auf Kosten eines Proxies auf einzelnen Maschinen zu
setzen.
Bevor die Optionen beschrieben werden sollte man beachten das dies einige Änderungen der
Standardwerte in der .htaccess Datei benötigt damit Anfrage auf die
staischen Dateien zeigen wenn diese existieren. Hier ist ein Beispiel einer einfachen
Anwendung die etwas Inhalt cacht, inklusive zwei spezifischer Feeds welche zusätzliche
Behandlung benötigen um einen korrekten Content-Type Header zu schicken:
AddType application/rss+xml .xml
AddType application/atom+xml .xml
RewriteEngine On
RewriteCond %{REQUEST_URI} feed/rss$
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.xml -f
RewriteRule .* cached/%{REQUEST_URI}.xml [L,T=application/rss+xml]
RewriteCond %{REQUEST_URI} feed/atom$
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.xml -f
RewriteRule .* cached/%{REQUEST_URI}.xml [L,T=application/atom+xml]
RewriteCond %{DOCUMENT_ROOT}/cached/index.html -f
RewriteRule ^/*$ cached/index.html [L]
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.(html|xml|json|opml|svg) -f
RewriteRule .* cached/%{REQUEST_URI}.%1 [L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Das obenstehende nimmt an das statische Dateien im Verzeichnis
./public/cached gecacht werden. Wir betrachten die Einstellung
dieses Ortes unter "public_dir" weiter unten.
Durch die Natur des Cachens von statischen Dateien bietet die Backend Klasse zwei
zusätzliche Methoden an: remove() und
removeRecursively(). Beide akzeptieren eine Anfrage
URI welche, wenn Sie mit dem "public_dir" in dem statische Dateien
gecacht werden verknüpft wird, und eine vor-gespeicherte Erweiterung angehängt wird,
entweder den Namen einer statischen Datei anbietet welche zu löschen ist, oder einen
Verzeichnispfad welcher rekursiv zu löschen ist. Durch die Einschränkung von
Zend_Cache_Backend_Interface akzeptieren alle anderen Methoden
wie save() eine ID welche durch Anwendung von
bin2hex() auf eine Anfrage URI berechnet
wird.
Durch das Level an dem das statische Cachen arbeitet ist das statische Dateicaching
auf eine einfachere Verwendung mit
Zend_Controller_Action_Helper_Cache ausgelegt. Dieser Helfer
assistiert beim Einstellen welche Aktionen eines Controllers zu cachen sind, mit welchen
Tags, und mit welcher Erweiterung. Er bietet auch Methoden für das Entleeren des Caches
durch die Anfrage URI oder Tag. Statischen Dateicaching wird auch
durch Zend_Cache_Manager unterstützt welcher vorkonfigurierte
Konfigurationstemplates für den statischen Cache enthält (als
Zend_Cache_Manager::PAGECACHE oder "page"). Die Standardwerte
können hierbei wie benötigt konfiguriert werden um einen "public_dir" Ort für das Cachen
zu setzen, usw.
Note:
Es sollte beachtet werden dass der statische Cache aktuell einen zweiten Cache
verwendet um Tags zu speichern (offensichtlich können wir Sie nicht anderswo
speichern da bei einem statischen Cache PHP nicht aufgerufen wird
wenn er richtig arbeitet). Das ist nur ein standardmäßiger Core Cache, und er sollte
ein persistentes Backend wie File oder TwoLevels verwenden (um die Vorteile des
Memory Speichers zu verwenden ohne die permanente Persistenz zu opfern). Das
Backend enthält die Option "tag_cache" um es zu konfigurieren (das ist
obligatorisch), oder die Methode setInnerCache().
Statische Backend Optionen
Option |
Datentyp |
Standardwert |
Beschreibung |
public_dir |
String |
NULL |
Verzeichnis in dem statische Dateien zu speichern sind. Es muß im
öffentlichen Verzeichnis existieren.
|
file_locking |
Boolean |
TRUE |
file_locking aktivieren oder deaktivieren: Kann die Korruption des
Caches unter schlechten Umständen verhindern hilft aber nicht bei
Multithreaded Webservern oder bei NFS Dateisystemen.
|
read_control |
Boolean |
TRUE |
Lesekontrolle aktivieren oder deaktivieren: Aktiviert wird ein
Kontrollschlüssel in die Cachedatei eingebettet und dieser Schlüssel
wird mit dem verglichen der nach dem Lesen berechnet wird.
|
read_control_type |
String |
'crc32' |
Typ der Lesekontrolle (nur wenn die Lesekontrolle aktiviert ist).
Mögliche Werte sind: 'md5' (am besten aber langsam), 'crc32' (etwas
weniger sicher aber schneller, bessere Wahl), 'adler32' (neue Wahl,
schneller als cec32), 'strlen' für einen reinen Längentest (am
schnellsten).
|
cache_file_umask |
Integer |
0700 |
Umask für gecachte Dateien. |
cache_directory_umask |
Integer |
0700 |
Umask für Verzeichnisse welche im public_dir erstellt wurden. |
file_extension |
String |
'.html' |
Standardmäßige Dateierweiterung für erstellt statische Dateien. Diese
kann im Fluge konfiguriert werden, siehe
Zend_Cache_Backend_Static::save() obwohl
generell empfohlen wird sich auf
Zend_Controller_Action_Helper_Cache zu verlassen
wenn man das macht, weil es ein einfacherer Weg ist als mit Arrays oder
der manuellen Serialisierung herumzuspielen.
|
index_filename |
String |
'index' |
Wenn eine Anfrage URI nicht genügend Informationen
enthält um eine statische Datei zu erstellen (normalerweise bedeutet
dies einen Indexaufruf, z.B. die URI von '/'), dann
wir stattdessen index_filename verwendet. Deshalb würden '' oder '/' auf
'index.html' verweisen (in der Annahme das die
standardmäßige file_extension '.html' ist).
|
tag_cache |
Object |
NULL |
Wird verwendet um einen 'inner' Cache zu Setzen der verwendet wird um
Tags zu speichern und Dateierweiterungen mit statischen Dateien zu
verknüpfen. Das muss gesetzt sein, oder der
statische Cache kann nicht verfolgt und gemanagt werden.
|
disable_caching |
Boolean |
FALSE |
Wenn es auf TRUE gesetzt wird, werden statische
Dateien nicht gecacht. Das zwingt alle Anfragen dynamisch zu sein,
selbst wenn diese markiert und in den Controller gecacht sind. Dies ist
für das Debuggen nützlich.
|
|
|